Si votre script Playwright fonctionnait la semaine dernière et est maintenant sur la page de défi de Cloudflare — ou retour HTTP 403 avec error 1020 — le problème est presque jamais votre code. Le problème est que votre navigateur s'identifie comme l'automatisation à travers une pile de signaux que vous ne pouvez même pas savoir qu'il émet.
Ce guide explique pourquoi les scripts Playwright sont bloqués par Cloudflare, ce qui est spécifiquement Cloudflare est la lecture, et les quatre classes de correction classées par la fiabilité qu'ils sont réellement en production. Le TL;DR: patchs de niveau page vous achètent quelques semaines; une identité cohérente au niveau du navigateur-binaire est la seule solution durable.
Pourquoi Playwright Triggers Cloudflare Bot Détection
Cloudflare bloque les sessions Playwright parce que le navigateur Chromium par défaut Playwright émet un ensemble cohérent de signaux que le système de gestion des robots de Cloudflare a été formé à reconnaître comme l'automatisation. Le bloc n'est pas aléatoire et il n'est pas basé sur la limitation de vitesse seule — il est basé sur la classification d'identité qui se produit avant la première interaction de votre script avec la page.
Les 200 premières millisecondes d'une charge de page protégée par Cloudflare impliquent une pile d'empreintes digitales et de contrôles comportementaux qui s'exécutent avant que votre code puisse agir. page.goto() résolve, la session est souvent déjà classifiée.
Pourquoi ça empire avec le temps
La gestion des robots de Cloudflare met à jour ses modèles de détection en permanence. Documentation sur la gestion des robots de Cloudflare, le système utilise l'apprentissage automatique formé sur les schémas de trafic à travers des millions de sites - ce qui signifie que la signature que votre installation furtive émet aujourd'hui peut être bénigne, mais la signature qu'il émet le mois prochain pourrait être marquée parce que le modèle de Cloudflare a mis à jour.
Les six signaux Cloudflare lit depuis Playwright
Pour résoudre le problème Cloudflare de Playwright, vous devez savoir ce que Cloudflare vérifie réellement. Il y a six signaux à impact élevé.
1. Les navigator.webdriver drapeau
Le signal le plus basique. Un jeu de Chromium à contrôle de vanille navigator.webdriver = true. Les systèmes de détection lisent cela lors de la première exécution de script. La plupart des plugins furtifs gèrent cela, mais certains correctifs sont eux-mêmes détectables.
2. Empreinte TLS (JA3 / JA4)
Le Chromium sous-jacent de Playwright produit un TLS Client Hello avec un ordre de chiffrement spécifique, une liste d'extension et un ensemble de courbes elliptiques. Ceci forme un hachage JA3 ou JA4 que Cloudflare peut correspondre aux signatures connues des clients d'automatisation. Spécifications JA3 open-source de Salesforce explique, la poignée de main TLS elle-même est dactylographiable indépendamment de l'agent utilisateur.
3. Ordre du cadre HTTP/2
L'ordre dans lequel un navigateur envoie HTTP/2 SETTINGS, WINDOW_UPDATE et les cadres HEADERS est cohérent dans une version Chrome mais diffère des bibliothèques d'automatisation qui construisent HTTP/2 différemment. Cloudflare lit ce calque.
4. Empreintes de toile, WebGL et audio
Lorsque la page lance le défi de Cloudflare JavaScript, elle rend le contenu de test dans les contextes de toile et WebGL et lit les données du pixel. Un stock Playwright Chromium produit des lectures déterministes et répétables. La même lecture apparaissant sur des milliers de sessions est elle-même un signal bot.
5. Timezone × locale × cohérence géographique IP
Si votre navigateur présente en-US et America/New_York Alors que votre IP traverse un datacenter de Francfort, l'inadéquation est un signal bot presque certain. Cloudflare fait référence à tous les trois.
6. Signaux comportementaux après la charge de page
Si le défi passe l'étape de l'empreinte digitale, les contrôles comportementaux commencent : entropie du mouvement de la souris, motifs de défilement, cadence de frappe.
Les quatre catégories de réparation, classées
Il y a quatre vraies catégories de correctifs pour le blocage de Playwright + Cloudflare. Ils diffèrent énormément dans la durée de fonctionnement.
Niveau 4 (le moins fiable): manipulation de drapeau par l'utilisateur et par l'agent
C'est la première chose que la plupart des développeurs essayent: définir un agent utilisateur personnalisé, supprimer le --enable-automation drapeau, et survol navigator.webdriver par addInitScript. Il s'adresse à un seul des six signaux ci-dessus.
Lifespan en production: Jours à semaines. La détection de base de Cloudflare est bien au-delà de cette couche.
Quand c'est approprié : Sites sans véritable détection de bot, où il suffit de supprimer le drapeau le plus évident.
Niveau 3 (fiabilité limitée): plugins Stealth
Les puppeteer-extra-stealth famille de plugins, porté à Playwright via des bibliothèques comme playwright-stealth. Ces patch une douzaine de propriétés de navigateur ou plus, remplacer la toile de lecture avec le bruit, et gérer plusieurs des signaux ci-dessus à travers l'injection JavaScript niveau page.
Lifespan en production: Semaines à quelques mois. Les patchs eux-mêmes ont des systèmes de détection de signatures peuvent identifier, et les patchs fonctionnent sur une couche différente de Chromium sous-jacent pipeline de rendu — de sorte que toile et WebGL rereadbacks toujours trahir le navigateur quand confronté avec des cas de bord.
Quand c'est approprié : Léger grattage de sites modérément protégés, prototypes, environnements où des défaillances occasionnelles sont acceptables.
Pourquoi il finit par échouer : Le patching de niveau de page est un modèle connu. recherche publiée sur la détection des navigateurs sans tête, navigateurs automatisés peuvent être identifiés par le moment et le comportement de leurs correctifs même lorsque ces correctifs ont réussi à spoof valeurs de propriété.
Niveau 2 (fiabilité modérée): Plugins de vol + proxy résidentiel + comportement prudent
Ajout d'un proxy résidentiel et instrumentation de votre script avec un timing réaliste — retards variables, courbes de mouvement de la souris, motifs de défilement — à la pile furtive du plugin.
Lifespan en production: Mois. C'est là que la plupart des équipes d'automatisation se résolvent pour des sites raisonnablement protégés.
Le mode d'échec restant : Le problème de cohérence local × timezone × IP. Vous achetez un proxy résidentiel en Allemagne ; vous oubliez de définir le fuseau horaire du navigateur en Europe/Berlin ; les en-têtes de langue envoient toujours en-US. L'inadéquation est silencieuse — votre script ne fait pas d'erreur — mais le taux de défi de Cloudflare augmente régulièrement au fil des semaines.
Niveau 1 (plus fiable): cohérence de l'identité au niveau du moteur
Cela signifie une construction de Chromium où les surfaces d'empreintes digitales sont patchées à l'intérieur du binaire du navigateur lui-même, et non via l'injection JavaScript. Cela signifie un profil où les propriétés de toile, WebGL, audio, navigateur, écran, polices, fuseau horaire et local sont générées pour correspondre les unes aux autres et la géographie IP proxy.
C'est ce qu'il y a Clawbrowser Les systèmes de détection de niveau moteur ne peuvent pas modifier le modèle lui-même, parce qu'il n'y a pas de code furtif qui fonctionne sur la page — les valeurs sont simplement ce que le navigateur rapporte nativement. Les proxies liés au profil éliminent la classe d'erreur locale/timezone/IP.
Si vous choisissez entre passer Playwright à un runtime local anti-detect et le déplacer vers un service de navigateur hébergé, voir le Comparaison de Clawbrowser vs Browserbase pour le déploiement, la vie privée et les compromis de coûts.
Lifespan en production: Indéfini, avec régénération périodique du profil. L'approche se dégrade gracieusement parce que chaque profil est unique plutôt que de porter une signature furtive connue.
Quand c'est approprié : Tout workflow de production où la fiabilité importe plus que la commodité de rester en stock Chromium. Charges de travail d'agent AI en particulier, parce que la couche d'orchestration peut continuer à fonctionner sans changement lorsque la couche d'exécution est échangée en dessous.
Mise en œuvre étape par étape : la correction de niveau 1
Passer d'un stock Playwright + furtif plugin configuration à un niveau moteur d'exécution prend quatre étapes et un changement de code d'une ligne.
Étape 1: Identifier à quoi ressemble votre pile existante
Avant de changer quoi que ce soit, testez votre configuration avec un inspecteur public d'empreintes numériques comme browserleaks.com ou creepjs. La plupart des configurations de plugins furtifs échouent au moins sur Canvas, WebGL et TLS.
Étape 2: Installez l'exécution
Pour Clawbrowser, commencez par le standalone clawctl archives publiques
clawbrowser/clawctl libération:
# Download the matching clawctl-* archive for your OS/arch.
open https://github.com/clawbrowser/clawctl/releases/latestAprès avoir extrait l'archive, installer l'intégration d'agent correspondant et set votre clé API & #160;:
clawctl install --agent claude-code --json
clawctl config set --api-key "clawbrowser_xxxxx"Étape 3: Démarrer une session gérée avec un profil d'empreintes digitales
clawbrowser start --session work -- --fingerprint=fp_us --country=US --connection-type=residential
clawbrowser endpoint --session work
# prints: http://127.0.0.1:9222Les --fingerprint, --countryet --connection-type drapeaux sélectionnez un profil où la toile, WebGL, navigateur, écran, polices, fuseau horaire, locale, et l'IP proxy résidentiel lié sont tous alignés avec l'identité américaine.
Étape 4: Changez une ligne dans votre script Playwright
Avant:
browser = await p.chromium.launch(headless=False)Après:
endpoint = "http://127.0.0.1:9222"
browser = await p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].pages[0]Tout en aval — localisations, navigation, assertions — fonctionne sans changement. L'agent ou la logique d'automatisation est intacte. Seul le modèle de connexion change.
Étape 5: Vérifier avant de faire circuler le trafic de production
Exécutez la page de vérification qui expédie avec l'exécution pour confirmer l'identité extérieure est ce que vous attendez:
clawbrowser start --session work --verify -- https://example.comC'est l'étape que la plupart des équipes sautent et la plupart des équipes regrettent plus tard. Vérifier une fois après la génération de profile capture la classe silencieuse locale-missatch de bug.
Pour les schémas complets d'intégration du CDP, y compris le déploiement de plusieurs sessions, voir le Documentation de l'utilisateur.
Résultats et avantages attendus
Après avoir passé de la furtivité à la cohérence de l'identité au niveau du moteur, les paramètres qui changent dans la production sont :
- Le taux de CAPTCHA passe de ~30 à 60 % sur les sites protégés par Cloudflare (typique avec les plugins furtifs) à des pourcentages à un seul chiffre, les autres CAPTCHA étant légitimement déclenchés par des modèles comportementaux plutôt que par la classification d'identité.
- La durée de vie de la session s'étend d'heures à des jours ou des semaines, car la session n'est pas indiquée progressivement après la première douzaine d'actions.
- Maintien en hauteur tombe parce que les correctifs n'ont pas besoin d'être mis à jour chaque fois que le modèle de détection de Cloudflare évolue.
- Les workflows multi-comptes deviennent fiables parce que chaque session a une identité cohérente et distincte plutôt que la même signature furtive partagée entre toutes les sessions.
La mise en garde honnête : aucun navigateur ne contourne le CAPTCHA universellement. Les sites qui lancent un défi interactif à chaque nouvelle session continueront de le faire, et tous les CAPTCHA qui semblent devoir encore être traités – soit en ajustant le workflow, en utilisant un résolveur CAPTCHA, soit en acceptant que certains workflows nécessitent une intervention humaine dans la boucle.
Erreurs courantes à éviter
La superposition des CDP sur les correctifs de niveau moteur
Si votre temps d'exécution gère les empreintes digitales au niveau binaire, n'utilisez pas les commandes CDP de Playwright pour surcharger les propriétés du navigateur ou le comportement de toile. Les deux couches peuvent être en désaccord, produisant des incohérences détectables que l'approche au niveau du moteur a été spécialement conçue pour éviter.
Rotation par procuration entre les sessions
La rotation des proxies lors d'une session active — commutation de l'IP à mi-parcours d'un workflow — est un signal bot fort, car les vrais humains ne changent pas d'IP toutes les 30 secondes.
Ignorer l'alignement du fuseau horaire/local
Si vous configurez manuellement les proxies, vous devez aussi aligner manuellement le fuseau horaire du navigateur, la localisation et les langues acceptées avec la géographie du proxy. L'oubli de l'un de ces modes est le mode de panne silencieuse le plus commun.
Réutiliser la même empreinte digitale sur des identités "différentes"
Deux sessions avec la même empreinte de toile et la même chaîne de rendu WebGL sont la même identité à Cloudflare, quel que soit l'agent utilisateur qu'elles présentent. Les identités distinctes nécessitent des profils d'empreintes digitales distincts, et pas seulement des cookies distincts.
Traitement du mode sans tête comme identique à celui du mode tête
Headless Chrome a des empreintes digitales supplémentaires (différentes sorties audio, différentes listes de plugin par défaut, différents chemins de rendu dans certains cas). Si votre débogage local est en mode tête et votre déploiement de production est sans tête, validez l'identité de production séparément.
Foire aux questions
Pourquoi mon script Playwright fonctionne-t-il localement mais est-il bloqué dans la production ?
La raison la plus courante est la différence environnementale : le développement local utilise votre IP résidentielle, votre fuseau horaire réel et votre empreinte digitale de développeur-machine, tandis que la production fonctionne dans un conteneur Linux derrière un datacenter ou une IP proxy, avec des surfaces potentiellement différentes de fuseau horaire, de locale et d'empreinte digitale. Le code d'orchestration est identique; la couche d'identité est complètement différente.
L'utilisation d'un seul proxy résidentiel corrige-t-elle le problème Cloudflare ?
Non. Un proxy résidentiel corrige le signal IP-geo mais laisse inchangés les signaux de toile, WebGL, TLS, navigateur et fuseau horaire. Si ceux-ci émettent encore des schémas d'automatisation, Cloudflare détecte toujours la session. La correction doit traiter tous les signaux ensemble, pas seulement l'IP.
Est playwright-stealth Assez pour les sites protégés par Cloudflare ?
Pour les sites légèrement protégés, souvent oui. Pour les sites avec Cloudflare Bot Management active ou toute solution de robot d'entreprise moyennement récente, généralement non — et la fiabilité se dégrade sur des mois comme mise à jour des modèles de Cloudflare.
Qu'en est-il du programme "Bot Vérifié" de Cloudflare — devrais-je simplement enregistrer mon robot?
Si votre cas d'utilisation est admissible (pilleurs de moteurs de recherche, services de surveillance, outils d'accessibilité), Programme de bots vérifiés de Cloudflare La plupart des workflows d'agents d'automatisation et d'IA ne sont pas admissibles au statut de robot vérifié, et l'automatisation non vérifiée doit gérer la détection selon ses propres mérites.
Cette approche fonctionnera-t-elle contre d'autres fournisseurs anti-bot (DataDome, Akamai, PerimeterX)?
Les mêmes principes s'appliquent : plus votre identité au niveau binaire est cohérente, moins les systèmes de détection peuvent signaler la session comme une automatisation.Les signaux spécifiques de chaque fournisseur pèsent différemment — DataDome s'appuie fortement sur les modèles comportementaux, Akamai sur TLS, PerimeterX sur un mix — mais la cohérence d'identité au niveau du moteur est la réponse structurelle à tous.
Conclusion
Le modèle est cohérent : Playwright + stock Chromium produit des signaux détectables, les patchs de niveau page adressent certains signaux tout en devenant détectables, et la seule réponse durable est la cohérence d'identité à l'intérieur du binaire du navigateur plus l'évacuation proxy qui correspond.
Si votre script continue à être bloqué par Cloudflare, le changement le plus important est de passer de "bolt furth à Chromium" à "utiliser une construction de Chromium où la furth est la par défaut et le proxy est lié à un profil cohérent." C'est la correction structurelle, et c'est la différence entre les scripts qui fonctionnent pendant deux semaines et les scripts qui fonctionnent pendant deux ans.
Clawbrowser Il parle CDP standard, de sorte que votre script Playwright existant change par une ligne — et le navigateur sous-jacent gère l'empreinte digitale, la liaison proxy et la cohérence d'identité qu'aucune approche basée sur le plugin ne peut correspondre.
Poursuivre la lecture
Articles associés

Puppeteer-Extra-Stealth est obsolète : ce que utilise l'automatisation moderne
puppeteer-extra-plugin-stealth n'a pas été mis à jour depuis 2023. Découvrez pourquoi il échoue face aux systèmes anti-bot modernes et quelles alternatives utiliser.
Lire l’article →
Pourquoi votre automatisation continue de déclencher CAPTCHA : le guide diagnostique à 7 signaux
Si votre script a fonctionné hier et frappe CAPTCHA aujourd'hui, la cause est identifiable. Marchez à travers les sept signaux — par ordre de probabilité.
Lire l’article →