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:
- Automatisierungs-Flags. Von Automatisierungstools gesteuerte Browser hatten historisch eine Eigenschaft
navigator.webdrivermit dem Werttrue, und manche Frameworks hinterlassen weitere Spuren in der Seite. - Fehlende oder ungewöhnliche Browser-Funktionen. Ein Headless-Build meldet womöglich keine Plugins, eine ungewöhnliche Sprachliste oder eine Fenstergröße, die nicht zu einem echten Bildschirm passt.
- Unterschiede beim Rendering. Canvas- und WebGL-Ausgaben können sich zwischen Headless- und Headed-Umgebung unterscheiden, besonders auf einem Server ohne GPU.
- Timing. Automatisierte Klicks und Seitenaufrufe passieren oft in einem Rhythmus, den kein Mensch erzeugen würde.
- Netzwerkverhalten. Request-Header, ihre Reihenfolge und der TLS-Handshake können einen Nicht-Browser-Client verraten.
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:
- Verwende nach Möglichkeit einen Browser mit Fenster oder einen Headless-Modus, der zu einem aktuellen Desktop-Browser passt.
- Setze Viewport und Sprache so, dass sie zueinander passen.
- Halte Zeitzone und Locale konsistent mit der IP-Adresse, die du verwendest.
- Verwende ein Profil mit seinen Cookies für eine Identität, statt bei jedem Lauf neu zu starten.
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
- Prüfe
robots.txtund die Nutzungsbedingungen der Seite, bevor du sie automatisierst. - Halte die Anfragerate niedrig und speichere bereits abgerufene Seiten zwischen.
- Behandle eine Sperre als Antwort, nicht als Rätsel, das man umgehen muss.
- Erhebe keine personenbezogenen Daten ohne Rechtsgrundlage.
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.