Scarnox · Blog

Headless-Browser erkannt: Ursachen und Lösungen (2026)

Eine Website meldet "headless browser detected", oder sie liefert deinem automatisierten Browser still eine andere Seite aus. Seiten tun das, weil ein Headless-Browser ohne Fenster läuft und sich oft in kleinen, messbaren Punkten von einem normalen Desktop-Browser unterscheidet. Dieser Leitfaden erklärt, auf welche Signale Seiten achten, wie du prüfst, was dein eigener Browser preisgibt, und wie eine sinnvolle Lösung aussieht. Er behandelt auch den Punkt, an dem die richtige Antwort ist aufzuhören oder die Prüfung als Captcha-Schritt zu behandeln.

Warum Seiten nach Headless-Browsern suchen

Automatisierungs-Frameworks steuern eine echte Browser-Engine, daher funktioniert der größte Teil der Seite gleich. Die Unterschiede zeigen sich an den Rändern:

Seiten fassen diese Signale zu einem Score zusammen. Ein niedriger Score kann eine stille Herabstufung, eine Reihe zusätzlicher Prüfungen oder eine Sperre bedeuten.

Schritt 1: Prüfen, was dein Browser preisgibt

Bevor du etwas änderst, schau dir an, was eine Seite aus deiner Automatisierung auslesen kann. Das Skript unten öffnet eine Seite, die du kontrollierst, und gibt die relevanten Signale aus. Es ist eine Diagnose: Verwende es auf deinen eigenen Testseiten, nicht um Systeme anderer Leute zu untersuchen.

from playwright.sync_api import sync_playwright

CHECK = """() => ({
    webdriver: navigator.webdriver,
    languages: navigator.languages,
    plugins: navigator.plugins.length,
    userAgent: navigator.userAgent,
    screen: [screen.width, screen.height],
    viewport: [window.innerWidth, window.innerHeight],
    timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
})"""

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com")  # durch eine Seite ersetzen, die dir gehört
    print(page.evaluate(CHECK))
    browser.close()

Führe dasselbe Skript mit headless=False aus und vergleiche die beiden Ausgaben. Die Unterschiede sind die Dinge, die eine Seite bemerken könnte.

Schritt 2: Die Inkonsistenzen beheben, nicht nur die Flags

Ein einzelnes Flag zu verstecken, während alles andere unverändert bleibt, ist der häufigste Fehler. Ein User-Agent, der Windows behauptet, während Schriften, Zeitzone und Bildschirmgröße einen Linux-Server beschreiben, ist ein stärkeres Signal als jede einzelne Eigenschaft. Ziel ist eine in sich stimmige Umgebung:

Playwright erlaubt, mehrere davon an einer Stelle zu setzen:

context = browser.new_context(
    locale="en-US",
    timezone_id="America/New_York",
    viewport={"width": 1366, "height": 768},
)
page = context.new_page()

Schritt 3: Langsamer werden und sich wie ein Besucher verhalten

Automatisierung fällt auf, wenn sie schneller ist, als ein Mensch sein könnte. Füge realistische Pausen zwischen Seitenaufrufen ein, vermeide es, dasselbe Element in perfektem Rhythmus zu klicken, und öffne nicht Hunderte Seiten parallel von einer Adresse. Weniger und langsamere Anfragen entlasten außerdem die Website, was ohnehin das Richtige ist.

Schritt 4: Wissen, wann die Prüfung ein Captcha ist

Manche Erkennungsabläufe enden in einer Herausforderung statt in einer Sperre. Dann siehst du ein Captcha-Widget, und dieser Schritt braucht ein Token von einem Solver. Der aktuell live verfügbare Captcha-Typ bei Scarnox ist PopularCaptcha. Der PopularCaptcha-Python-Leitfaden zeigt, wie das Token angefordert und übermittelt wird. Andere Widgets, etwa Cloudflare Turnstile, stehen auf der Roadmap, sind aber noch nicht live. Prüfe deshalb Captcha-Typen erklärt, bevor du mit einem davon planst.

Ein Captcha-Schritt bedeutet nicht, dass der Rest deines Setups in Ordnung ist. Wenn dieselbe Seite jede Headless-Sitzung blockiert, egal wie du sie konfigurierst, ist das ein klares Signal, dass der Betreiber keinen automatisierten Zugriff möchte. Respektiere das.

Was du nicht tun solltest

Versuche nicht, Automatisierung vor einer Seite zu verbergen, die sie untersagt, und verwende keine Werkzeuge zur Umgehung der Erkennung, um Zugriffskontrollen zu umgehen. Das ist ein anderes Projekt als das Testen und Sammeln öffentlicher Daten, um das es in diesem Leitfaden geht. Wenn dein Projekt Zugriff braucht, den du nicht erhalten hast, frage den Betreiber der Seite oder suche nach einer offiziellen API oder einem Datenfeed.

Verantwortungsvoll scrapen

Wie es weitergeht

Wenn deine Automatisierung für End-to-End-Tests gedacht ist, ist der Ansatz ein anderer: siehe Captcha in automatisierten Tests. Wenn du ein Playwright- oder Puppeteer-Setup betreibst, erklärt Captcha-Behandlung mit Playwright und Puppeteer, wohin das Token gehört.

Starte mit kostenlosem Testguthaben, ohne Karte: Konto erstellen und teste den PopularCaptcha-Ablauf auf einer eigenen Seite. Aktuelle Preise findest du auf der Preisseite.

Nächste Schritte