Events und Debugging
Welche Seiten-Events Ihren Automatisierungs-Client erreichen, wie Sie die Konsolenausgabe trotzdem mitschneiden und wie Sie prüfen, welcher Renderer die Seite tatsächlich zeichnet.
Console- und Page-Error-Events
Die Engine leitet Console- und Page-Error-Events nicht an Automatisierungs-Clients weiter, daher empfangen page.on("console") und page.on("pageerror") nichts. Das ist Absicht — genau diese Weiterleitung misst eine Probe, die nach Automatisierung sucht. In-Page-Handler für window.onerror und unhandledrejection feuern ganz normal; um die Konsolenausgabe mitzuschneiden, sammeln Sie sie also in der Seite und lesen sie mit page.evaluate() zurück. Die Python- und Node-SDKs weisen beim Start einmalig darauf hin.
Zwei Treiberaufrufe hängen von diesen Events ab. page.setContent() von Playwright wartet auf ein Console-Event und läuft deshalb in einen Timeout (in Puppeteer funktioniert der Aufruf): Öffnen Sie das HTML als data:-URL, oder schreiben Sie es mit page.evaluate() in die Seite. exposeFunction() und exposeBinding() funktionieren in Playwright und Puppeteer in der Seite, die beim Aufruf geöffnet ist, und verschwinden, sobald diese Seite navigiert: Rufen Sie sie nach der letzten Navigation auf, oder geben Sie Ergebnisse über page.evaluate() zurück.
from urllib.parse import quote
# Instead of page.set_content(html):
# short HTML: a data: URL (the page gets no origin of its own, so no cookies or storage)
page.goto("data:text/html," + quote(html))
# any HTML: write it into a page you have navigated to; it keeps that page's origin
page.evaluate("html => { document.open(); document.write(html); document.close(); }", html)Kohärenzprüfung des Render-Backends (checkRenderCoherence)
Eine Persona kann eine GPU angeben. Wird die Seite aber tatsächlich von einem Software-Rasterizer gezeichnet (SwiftShader / llvmpipe — headless ohne GPU üblich), kann ein strenger Detektor das erkennen. Prüfen Sie eine geladene Seite: Die Funktion liest den (unmaskierten) WebGL-Vendor/-Renderer, den die Seite tatsächlich sieht, meldet einen Fallback auf einen Software-Rasterizer (ein fatales Headless-Indiz — aktivieren Sie die Canvas-Bridge oder starten Sie headed auf einer echten GPU) oder ein inkohärentes Vendor/Renderer-Paar und liefert ein strukturiertes Ergebnis zurück. Übergeben Sie die angegebene GPU, um zusätzlich die gerenderte GPU-Familie zu prüfen. Verfügbar synchron, asynchron und in Node.
from clearcote import launch, check_render_coherence
browser = launch(fingerprint="seed-123")
page = browser.new_page(); page.goto("about:blank")
verdict = check_render_coherence(page) # {'renderer', 'software_suspected', 'coherent', 'warnings'}
if not verdict["coherent"]:
print(verdict["warnings"]) # e.g. software rasterizer / incoherent GPU family
browser.close()