Scarnox · Blog

Navigateur headless détecté : causes et solutions (2026)

Un site affiche « headless browser detected », ou il sert discrètement une autre page à votre navigateur automatisé. Les sites font cela parce qu'un navigateur headless fonctionne sans fenêtre et diffère souvent d'un navigateur de bureau classique sur de petits points mesurables. Ce guide explique quels signaux les sites observent, comment diagnostiquer ce que votre propre navigateur expose, et à quoi ressemble une solution raisonnable. Il couvre aussi le moment où la bonne réponse est de s'arrêter, ou de traiter la vérification comme une étape de captcha.

Pourquoi les sites vérifient les navigateurs headless

Les frameworks d'automatisation pilotent un vrai moteur de navigateur, donc la plus grande partie de la page se comporte de la même façon. Les différences apparaissent sur les bords :

Les sites combinent ces signaux en un score. Un score bas peut entraîner une rétrogradation discrète, une série de vérifications supplémentaires, ou un blocage.

Étape 1 : voir ce que votre navigateur expose

Avant de modifier quoi que ce soit, regardez ce qu'une page peut lire de votre automatisation. Le script ci-dessous ouvre une page que vous contrôlez et affiche les signaux qui comptent. C'est un outil de diagnostic : utilisez-le sur vos propres pages de test, pas pour sonder les systèmes d'autres personnes.

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")  # remplacez par une page qui vous appartient
    print(page.evaluate(CHECK))
    browser.close()

Relancez le même script avec headless=False, puis comparez les deux résultats. Les différences sont les éléments qu'un site pourrait remarquer.

Étape 2 : corriger les incohérences, pas seulement les indicateurs

Masquer un indicateur tout en laissant les autres inchangés est l'erreur la plus courante. Un user agent qui annonce Windows alors que les polices, le fuseau horaire et la taille d'écran décrivent un serveur Linux est un signal plus fort qu'une seule propriété. Visez un environnement cohérent :

Playwright permet de définir plusieurs de ces éléments au même endroit :

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

Étape 3 : ralentir et agir comme un visiteur

L'automatisation devient évidente lorsqu'elle va plus vite qu'une personne ne le pourrait. Ajoutez des pauses réalistes entre les chargements de page, évitez de cliquer sur le même élément selon un rythme parfait, et n'ouvrez pas des centaines de pages en parallèle depuis une même adresse. Faire moins de requêtes, et plus lentement, réduit aussi la charge sur le site, ce qui est de toute façon la bonne chose à faire.

Étape 4 : savoir quand la vérification est un captcha

Certaines vérifications de détection aboutissent à un défi plutôt qu'à un blocage. Vous verrez un widget captcha, et cette étape demande un jeton fourni par un solveur. Le type de captcha actuellement disponible chez Scarnox est PopularCaptcha. Le guide Python PopularCaptcha montre comment le jeton est demandé et soumis. D'autres widgets, comme Cloudflare Turnstile, sont prévus mais pas encore disponibles ; consultez donc les types de captcha expliqués avant de bâtir un projet autour de l'un d'eux.

Une étape captcha ne signifie pas que le reste de votre configuration est saine. Si le même site bloque chaque session headless quelle que soit votre configuration, c'est un signal clair que le propriétaire ne souhaite pas d'accès automatisé. Respectez-le.

Ce qu'il ne faut pas faire

N'essayez pas de dissimuler l'automatisation à un site qui l'interdit, et n'utilisez pas d'outils d'évasion de détection pour franchir des contrôles d'accès. C'est un projet d'une tout autre nature que les tests et la collecte de données publiques couverts par ce guide. Si votre projet nécessite un accès qui ne vous a pas été accordé, demandez au propriétaire du site ou cherchez une API ou un flux de données officiel.

Scraper de manière responsable

Pour aller plus loin

Si votre automatisation sert à des tests de bout en bout, l'approche est différente : voir captcha dans les tests automatisés. Si vous utilisez une configuration Playwright ou Puppeteer, gérer les captchas avec Playwright et Puppeteer explique où placer le jeton.

Commencez avec un crédit d'essai gratuit, sans carte bancaire : créez un compte et testez le flux PopularCaptcha sur votre propre page. Pour les tarifs actuels, consultez la page tarifs.

Prochaines étapes