L'alternative à playwright-stealth open source
playwright-stealth est le moyen le plus rapide d’ajouter de la furtivité à Playwright en Python : un wrapper, et chaque page reçoit un ensemble d’évasions JavaScript. Mais ces évasions sont des surcharges posées sur un navigateur d’origine, et son propre mainteneur le qualifie de preuve de concept. Clearcote, lui, définit ces valeurs nativement dans le moteur : il n’y a aucune surcharge qu’une page pourrait trouver.
Qu'est-ce que playwright-stealth ?
playwright-stealth est un portage Python de puppeteer-extra-plugin-stealth pour Playwright. Le portage d’origine, par AtuboDad, n’a pas été mis à jour depuis mi-2024 ; le nom PyPI est désormais repris par un fork activement maintenu (Mattwmaster58), qui a publié une version 2.0 avec une API plus propre et intégré les pull requests en attente. Il est sous licence MIT et très largement utilisé : environ 2,4 millions de téléchargements PyPI par mois.
Il fonctionne en enregistrant des scripts d’init sur chaque contexte, chacun corrigeant un indice : navigator.webdriver, navigator.languages, les plugins, le vendor WebGL, chrome.runtime, etc. Le mainteneur est franc sur ses limites. Le README dit de ne pas compter sur lui pour contourner autre chose que la détection de bots la plus simple, et le présente comme un point de départ. Les raisons sont structurelles : une surcharge JavaScript se repère avec Function.prototype.toString ou en vérifiant le descripteur de propriété, les scripts d’init de la page n’atteignent pas les Web Workers, et rien dans le package ne touche aux effets de bord CDP propres au driver Playwright ni à la couche réseau.
Clearcote vs playwright-stealth
| Fonctionnalité | Clearcote | playwright-stealth |
|---|---|---|
| Approche | Patchs C++ au niveau du moteur : valeurs natives | Scripts d’init JavaScript sur un navigateur d’origine |
| Raccord détectable | Aucun : natif dans la page, les iframes et les workers | Surcharges visibles via toString, les descripteurs et les relectures depuis un worker |
| Identité de l’empreinte | Persona cohérent dérivé d’une seule seed (canvas, WebGL, polices, navigator) | Quelques valeurs définies à la main par-dessus les valeurs réelles de l’hôte |
| Effets de bord du driver / CDP | Contenus au lancement (mondes isolés) et dans le moteur | Non traités ; driver Playwright d’origine |
| Cohérence TLS / réseau | Le ClientHello suit la version de Chrome annoncée | Non traitée |
| Framework | Playwright et Puppeteer (Python, Node, .NET) | Playwright (Python) |
| Mise en place | Remplacer le binaire du navigateur | Envelopper Playwright en une ligne |
| Coût | Build ouvert gratuit ; dernier build gratuit avec GitHub ; Pro $49/mois | Gratuit et open source (MIT) |
Comparatif établi en septembre 2026. Licence de playwright-stealth : Open source (MIT) ; les détails évoluent — consultez le projet pour les informations les plus récentes.
Pourquoi les équipes choisissent Clearcote
Natif, pas surchargé
Chaque évasion de playwright-stealth remplace une vraie fonction du navigateur par une fonction JavaScript, et ce remplacement est observable. Clearcote modifie la valeur à l’intérieur de Chromium : la fonction qu’inspecte la page est la vraie fonction native.
La même réponse dans chaque realm
Les scripts d’init patchent la page. Relisez la même valeur depuis un Web Worker ou une iframe neuve, et vous obtenez l’original non patché. Les valeurs définies au niveau du moteur concordent partout.
Une identité complète, pas une poignée de champs
Une seule seed --fingerprint produit une machine cohérente sur le canvas, WebGL, l’audio, les polices, l’écran et le matériel, au lieu de quelques surcharges plaquées sur l’hôte réel.
Gardez votre code Playwright
Clearcote est un binaire Chromium. Faites pointer executable_path dessus, ou utilisez le launch() du SDK, et le reste de votre script Playwright ne change pas.
Quand playwright-stealth peut être le meilleur choix
- Vous voulez tester quelque chose en cinq minutes sur une cible peu exigeante, sans gérer de binaire de navigateur.
- Vos cibles ne vérifient que les indices évidents, comme
navigator.webdriver. - Vous utilisez déjà Clearcote et vous vous demandez s’il vous le faut encore : non. Ses évasions font doublon avec des valeurs que le moteur définit déjà, et ajouter des surcharges JavaScript par-dessus fait réapparaître le raccord que le moteur supprime.
FAQ
playwright-stealth fonctionne-t-il encore ?
Il s’installe et tourne toujours, et le fork maintenu (2.x) est mis à jour. Qu’il suffise ou non dépend de la cible. Son propre README prévient qu’il ne gère que la détection la plus simple, car les surcharges JavaScript sont détectables et il ne touche ni à la couche driver ni à la couche réseau.
Quelle est la différence entre playwright-stealth et Clearcote ?
playwright-stealth injecte du JavaScript dans un Chromium d’origine pour surcharger un ensemble de valeurs. Clearcote est un Chromium modifié où ces valeurs sont natives, cohérentes d’une frame et d’un worker à l’autre, avec en dessous une empreinte TLS assortie. Les deux se pilotent avec un Playwright ordinaire.
Faut-il utiliser playwright-stealth avec Clearcote ?
Non. Le moteur renvoie déjà des valeurs cohérentes, et y superposer des surcharges JavaScript remplace des fonctions natives par des fonctions détectables. Lancez Clearcote avec Playwright, tout simplement.
Existe-t-il un playwright-stealth pour Node.js ?
L’équivalent Node est playwright-extra avec le plugin stealth de puppeteer-extra, qui repose sur la même conception à base de surcharges JavaScript. Clearcote fonctionne de la même façon depuis Python, Node et .NET.
À lire aussi
Essayez l'alternative Chromium open source
Gratuit et open source, s'utilise tel quel avec Playwright et Puppeteer, cohérent jusqu'au handshake TLS.
Gratuit pour un navigateur avec GitHub. Sans carte.