import { chromium } from "playwright"; import { spawn } from "node:child_process"; const server = spawn(process.execPath, ["index.js"], { cwd: "server", env: { ...process.env, PORT: "4434" }, stdio: "ignore" }); const warte = async () => { for (let i=0;i<40;i++){ try { if ((await fetch("http://127.0.0.1:4434/index.html")).ok) return; } catch{} await new Promise(r=>setTimeout(r,250)); } throw new Error("kein Server"); }; await warte(); const b = await chromium.launch(); const s = await b.newPage(); await s.goto("http://127.0.0.1:4434/abonnieren.html", { waitUntil: "domcontentloaded" }); await s.evaluate(() => { window.__v = []; document.addEventListener("securitypolicyviolation", (e) => window.__v.push({ dir: e.violatedDirective, blockiert: e.blockedURI })); }); const paypal = await s.evaluate(async () => { const geladen = await new Promise((res) => { const sk = document.createElement("script"); sk.src = "https://www.paypal.com/sdk/js?client-id=test¤cy=EUR"; sk.onload = () => res(true); sk.onerror = () => res(false); document.body.appendChild(sk); setTimeout(() => res(false), 15000); }); if (!geladen || !window.paypal) return { geladen, buttons: false }; const ziel = document.createElement("div"); ziel.id = "pp-test"; ziel.style.width = "300px"; document.body.appendChild(ziel); try { await window.paypal.Buttons({}).render("#pp-test"); } catch (e) { return { geladen, buttons: false, fehler: String(e).slice(0,150) }; } const f = ziel.querySelector("iframe"); return { geladen, buttons: !!f, rahmenHoehe: f ? Math.round(f.getBoundingClientRect().height) : 0 }; }); console.log("PAYPAL:", JSON.stringify(paypal)); const google = await s.evaluate(async () => { const geladen = await new Promise((res) => { const sk = document.createElement("script"); sk.src = "https://accounts.google.com/gsi/client"; sk.onload = () => res(true); sk.onerror = () => res(false); document.head.appendChild(sk); setTimeout(() => res(false), 15000); }); if (!geladen || !window.google) return { geladen, knopf: false }; const ziel = document.createElement("div"); ziel.id = "g-test"; document.body.appendChild(ziel); try { window.google.accounts.id.initialize({ client_id: "000000000000-testtesttesttesttesttest.apps.googleusercontent.com", callback: () => {} }); window.google.accounts.id.renderButton(ziel, { type: "standard" }); } catch (e) { return { geladen, knopf: false, fehler: String(e).slice(0,150) }; } await new Promise(r => setTimeout(r, 4000)); return { geladen, knopf: ziel.children.length > 0, inhalt: ziel.innerHTML.slice(0, 60) }; }); console.log("GOOGLE:", JSON.stringify(google)); await s.waitForTimeout(3000); const v = await s.evaluate(() => window.__v); const zus = {}; for (const e of v) { const k = e.dir + " <- " + (e.blockiert || "(inline)"); zus[k] = (zus[k]||0)+1; } console.log("\nVERSTOESSE:", Object.keys(zus).length === 0 ? "KEINE" : ""); Object.entries(zus).sort().forEach(([k,n]) => console.log(" " + n + "x " + k)); console.log("\nRahmen:"); s.frames().forEach(f => console.log(" " + f.url().slice(0,75))); await b.close(); server.kill();