Scarnox · Blog

Headless browser gedetecteerd: oorzaken en oplossingen (2026)

Een site meldt "headless browser gedetecteerd", of hij toont stilletjes een andere pagina aan je geautomatiseerde browser. Sites doen dit omdat een headless browser zonder venster draait en zich op kleine, meetbare punten vaak anders gedraagt dan een gewone desktopbrowser. Deze gids legt uit welke signalen sites bekijken, hoe je nagaat wat je eigen browser prijsgeeft, en hoe een verstandige oplossing eruitziet. Ook behandelt hij het punt waarop het juiste antwoord is om te stoppen, of om de controle als captchastap te behandelen.

Waarom sites op headless browsers controleren

Automatiseringsframeworks sturen een echte browsermotor aan, dus het grootste deel van de pagina werkt hetzelfde. De verschillen zitten aan de randen:

Sites combineren deze signalen tot een score. Een lage score kan betekenen dat de site stilletjes een mindere versie toont, extra controles uitvoert, of blokkeert.

Stap 1: zie wat je browser blootgeeft

Kijk voordat je iets verandert na wat een pagina kan uitlezen van je automatisering. Het onderstaande script opent een pagina die jij beheert en print de signalen die ertoe doen. Het is een diagnostische tool: gebruik hem op je eigen testpagina's, niet om andermans systemen te onderzoeken.

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")  # vervang door een pagina die van jou is
    print(page.evaluate(CHECK))
    browser.close()

Voer hetzelfde script opnieuw uit met headless=False en vergelijk de twee uitvoer. De verschillen zijn de dingen die een site zou kunnen opmerken.

Stap 2: los de inconsistenties op, niet alleen de vlaggen

Eén vlag verbergen terwijl de rest onveranderd blijft, is de meest voorkomende fout. Een user agent die Windows zegt, terwijl de lettertypen, tijdzone en schermgrootte een Linux-server beschrijven, is een sterker signaal dan één eigenschap. Streef naar een omgeving die van binnen klopt:

Playwright laat je meerdere van deze instellingen op één plek zetten:

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

Stap 3: vertraag en gedraag je als een bezoeker

Automatisering valt op zodra ze sneller is dan een mens kan zijn. Voeg realistische pauzes toe tussen paginaladingen, vermijd het klikken op hetzelfde element in een perfect ritme, en open niet honderden pagina's tegelijk vanaf één adres. Minder en rustigere requests belasten de site ook minder, wat sowieso het juiste is.

Stap 4: weet wanneer de controle een captcha is

Sommige detectiestromen eindigen in een uitdaging in plaats van een blokkade. Je ziet dan een captchawidget, en voor die stap heb je een token van een solver nodig. Het live captchatype bij Scarnox is vandaag PopularCaptcha. De PopularCaptcha-gids voor Python laat zien hoe het token wordt aangevraagd en ingediend. Andere widgets, zoals Cloudflare Turnstile, staan op de roadmap maar zijn nog niet live. Bekijk daarom eerst de captchatypen uitgelegd voordat je ergens op vooruit plant.

Een captchastap betekent niet dat de rest van je opzet deugt. Als dezelfde site elke headless-sessie blokkeert, ongeacht hoe je alles instelt, dan is dat een duidelijk signaal dat de eigenaar geen geautomatiseerde toegang wil. Respecteer dat.

Wat je niet moet doen

Probeer niet om automatisering te verbergen voor een site die dat verbiedt, en gebruik geen tooling voor het omzeilen van detectie om toegangscontroles te passeren. Dat is een ander soort project dan het testen en het verzamelen van openbare data waar deze gids over gaat. Heb je toegang nodig die je niet hebt gekregen, vraag het dan aan de eigenaar van de site, of zoek naar een officiële API of datafeed.

Scrape verantwoord

Waar je verder kunt

Als je automatisering voor end-to-end tests is, is de aanpak anders: zie captcha in geautomatiseerde tests. Gebruik je een Playwright- of Puppeteer-opzet, dan legt captchaafhandeling met Playwright en Puppeteer uit waar het token terechtkomt.

Start met gratis proefkrediet, zonder creditcard: maak een account aan en test de PopularCaptcha-flow op je eigen pagina. Voor de actuele tarieven zie de prijspagina.

Volgende stappen