// Explore the public Eurocontrol IFPUV page to find the route input / validate // button / result area. Run: node explore.mjs import { chromium } from "playwright"; const URL = "https://www.public.nm.eurocontrol.int/PUBPORTAL/gateway/spec/"; const b = await chromium.launch({ headless: true }); const ctx = await b.newContext({ viewport: { width: 1600, height: 1000 } }); const page = await ctx.newPage(); try { await page.goto(URL, { waitUntil: "domcontentloaded", timeout: 60000 }); await page.waitForTimeout(9000); // let the GWT app render console.log("TITLE:", await page.title()); console.log("URL :", page.url()); const dump = await page.$$eval( "input, textarea, button, a, span, div[role], [class*='gwt'], [class*='Button']", (nodes) => nodes .map((n) => ({ tag: n.tagName, type: n.getAttribute("type") || "", id: n.id || "", cls: (n.className && typeof n.className === "string" ? n.className : "").slice(0, 40), text: (n.innerText || n.value || "").trim().slice(0, 50), })) .filter((e) => e.text && e.text.length > 1) .slice(0, 120), ); console.log(JSON.stringify(dump, null, 0)); await page.screenshot({ path: "ifpuv.png", fullPage: true }); console.log("screenshot -> ifpuv.png"); } catch (e) { console.error("ERR:", e.message); } finally { await b.close(); }