Un navigateur furtif pour Playwright et Puppeteer
Clearcote est un Chromium : l'automatisation que vous avez déjà continue de fonctionner. Remplacez l'appel de lancement par le launch() du SDK et vous récupérez un handle Playwright qui se pilote comme un Browser (sur un profil jetable, donc newContext() renvoie ce même contexte), et qui exécute un build dont les contrôles d'identité sont compilés dans le moteur au lieu d'être injectés en JavaScript.
Le build ouvert ne demande aucun compte. Le dernier build est gratuit avec GitHub pour un navigateur à la fois.
Changez la ligne de lancement, gardez tout le reste
# pip install clearcote
from clearcote import launch
browser = launch(fingerprint="account-42", light_stealth=True)
page = browser.new_page()
page.goto("https://example.com")
browser.close()Points clés
Une migration en une ligne
launch() renvoie un handle Playwright sur un profil jetable : sélecteurs et page objects restent tels quels. Son newContext() renvoie ce même contexte ; passez donc ephemeralProfile: false là où vous avez besoin de contextes isolés. Puppeteer se connecte à l'endpoint CDP de serve() avec puppeteer.connect.
Un binaire vérifié, récupéré pour vous
À la première utilisation, le SDK télécharge le build correspondant et vérifie son SHA-256 : le build ouvert d'après des hashes intégrés au SDK, le build sous licence d'après le hash renvoyé par son téléchargement. La mise à jour automatique optionnelle (build ouvert uniquement) vérifie la dernière version d'après ses checksums publiés, ainsi que leur signature GPG quand gpg est installé.
L'identité en options nommées
fingerprint, platform, brand, timezone, acceptLanguage, proxy et geoip sont des arguments, pas des switches à retenir. Une seule seed garde une identité stable d'une exécution à l'autre.
Des valeurs par défaut cohérentes
Les lancements en mode headed se passent du viewport émulé pour que la taille de la page corresponde à la vraie fenêtre, WebRTC garde privée l'adresse de votre machine, et QUIC est désactivé derrière un proxy pour qu'aucun trafic UDP ne lui échappe.
Entrées humanisées, en un flag
humanize: true envoie les clics, la frappe, les glisser-déposer et les défilements sous forme d'entrées natives trusted sur des trajectoires courbes, avec navigator.webdriver laissé à false.
Trois langages
Python (synchrone et asynchrone), Node et .NET, sur PyPI, npm et NuGet. Les trois ont la même bibliothèque : geoip, saisie humanisée, Widevine, profils enregistrés, vérifications de cohérence du rendu et les helpers de l’agent. Les outils en ligne de commande sont fournis avec Python et Node.
Ce que le SDK fait pour vous
Le package encapsule le binaire Clearcote pour que les options d'identité deviennent des arguments nommés. Il résout le navigateur dans un ordre fixe (un chemin explicite, la variable d'environnement CLEARCOTE_BINARY, une version que vous avez demandée, le dernier build sous licence s'il trouve une clé de licence, puis le build ouvert épinglé dans le SDK), le vérifie et le met en cache, le lance via Playwright, puis vous renvoie les objets que votre code utilise déjà.
Comme les contrôles se trouvent dans le moteur C++, il n'y a aucun plugin stealth à charger et rien n'est injecté dans la page. Un plugin patche des propriétés depuis JavaScript, et un getter patché se distingue d'un getter natif. Ici, le getter est le getter natif, dans le frame principal, dans les iframes et dans les workers. Comment fonctionne la détection explique pourquoi c'est important.
Deux comportements diffèrent de Chromium standard, tous deux volontairement. Les événements de console et d'erreur de page ne sont pas transmis au client d'automatisation, car c'est précisément cette transmission que mesure une sonde d'automatisation : collectez-les dans la page et relisez-les avec page.evaluate(). Par ailleurs, un proxy SOCKS5 avec nom d'utilisateur et mot de passe fonctionne directement, les identifiants étant passés dans des champs username et password séparés, car le moteur implémente l'authentification qui manque à Chromium standard. Cela fonctionne sur tous les builds à partir de la 151, build ouvert gratuit compris ; les builds ouverts antérieurs à la 151 ne peuvent pas s'authentifier auprès d'un proxy SOCKS5.
Un plugin stealth face à un navigateur modifié au niveau du moteur
Les plugins stealth open source sont une première étape raisonnable, et beaucoup de projets commencent par là. Consultez la comparaison avec puppeteer-extra-plugin-stealth pour une vue plus complète.
Cas d'usage
Scraping et collecte de données
Gardez votre crawler Playwright ou Puppeteer existant et changez ce qui tourne en dessous.
Tests end-to-end sur de vraies pages
Testez des parcours sur des sites qui traitent un Chromium automatisé standard différemment d'un navigateur normal.
Migrer une suite existante
Les sélecteurs et les page objects ne bougent pas, seul l'appel de lancement change. Les fixtures qui ouvrent un contexte neuf par test ont besoin de ephemeralProfile: false, car le newContext() de launch() renvoie son unique contexte de profil.
Recherche sur le fingerprinting
Exécutez les mêmes scripts avec et sans persona et comparez ce que mesure une page.
Clearcote est conçu pour la confidentialité, les tests, la recherche et l'automatisation licite. Vous êtes responsable de l'usage que vous en faites et du respect des conditions d'utilisation des sites que vous visitez.
38 921 lignes entre Chromium d'origine et Clearcote Pro.
C'est l'écart entre le build Pro et le Chromium livré par Google. Chaque valeur qu'un site peut lire est définie là où Chromium la calcule, si bien que la page, ses workers et ses iframes décrivent tous le même appareil.
- Canvas
- WebGL
- WebGPU
- Audio
- Polices
- Écran et fenêtre
- WebRTC
- TLS
- Client hints
- Timing des saisies
- Voix et codecs
Build Pro, compté sur sa pile de patchs r57 (Chromium 156.0.8078.47). Le build ouvert gratuit est un ensemble de patchs plus restreint et public.
345 files changed, 35915 insertions(+), 3006 deletions(-)
240 patchs
Fichiers modifiés, par domaine
- Moteur de rendu (Blink)118
- Navigateur (chrome/)52
- Couche content42
- Composants39
- Pile réseau22
- Interface et fenêtres14
- TLS (BoringSSL)11
- V8 et URL17
- Tout le reste30
Offres qui l'incluent
Le SDK est inclus dans les trois formules, tout comme la quasi-totalité des options d'identité (les quelques-unes qui exigent le build sous licence sont signalées dans la liste des flags d'empreinte). Sans clé, il exécute le build ouvert. Avec une clé de licence (gratuite avec un compte GitHub), il exécute le dernier build, avec les extras réservés au build sous licence présentés sur la page Tarifs.
Comparer les offresFAQ
Est-ce vraiment un remplacement transparent ?
À peu de chose près. En Python sync et en Node, launch() renvoie un handle de type navigateur sur un profil jetable : newPage() et tout ce qui suit fonctionnent comme avant, mais newContext() renvoie ce même contexte ; le code qui a besoin de contextes isolés doit donc passer ephemeralProfile: false ou lancer un navigateur par contexte. launchPersistentContext() renvoie un BrowserContext standard. Puppeteer se connecte à l'endpoint CDP de serve() avec puppeteer.connect, et le SDK .NET renvoie des objets Microsoft.Playwright standard (IBrowserContext depuis LaunchEphemeralProfileAsync, IBrowser depuis LaunchAsync).
Ai-je encore besoin de puppeteer-extra-plugin-stealth ou de playwright-stealth ?
Non, et mieux vaut ne pas en ajouter. Ces plugins patchent des valeurs depuis du JavaScript injecté, et ce patch peut lui-même être repéré. Clearcote définit les valeurs dans le moteur : il ne reste rien à patcher pour un plugin.
Fonctionne-t-il en headless ?
Oui. Le mode headed reste le choix par défaut le plus sûr là où vous pouvez l'utiliser, car le mode headless a ses propres signes révélateurs. Dans les conteneurs, l'image Docker officielle tourne par défaut en mode headed sous un affichage virtuel.
Quels langages sont pris en charge ?
Python (API synchrone et asynchrone), Node.js et .NET. Depuis le SDK 0.58.0, les trois ont la même bibliothèque : correspondance geoip, saisie humanisée (une option de lancement, avec aussi des appels explicites de type HumanClickAsync en .NET), profils enregistrés, vérifications de cohérence du rendu, Widevine et l’agent IA intégré au navigateur. Les outils en ligne de commande clearcote sont fournis avec les paquets Python et Node.
Comment garder la même identité d'une exécution à l'autre ?
Réutilisez la même seed fingerprint et utilisez launchPersistentContext avec un répertoire de données utilisateur pour que les cookies et le stockage persistent. Dériver la seed de l'identifiant de votre propre compte ou tenant la rend reproductible. Voir identités persistantes.
Aller plus loin dans la documentation
Fonctionnalités associées
Une seule option donne aux clics, à la frappe, aux glisser-déposer et aux défilements de Playwright des trajectoires courbes et un timing humain, toujours sous forme d'entrées natives trusted.
Canvas, WebGL, WebGPU, audio, polices, écran et matériel dérivés d'une seule seed dans le moteur C++, avec la locale et le fuseau horaire assortis : chaque surface concorde avec toutes les autres.
Définissez un proxy avec geoip activé : le fuseau horaire, les langues et WebRTC suivent l'IP de sortie. SOCKS5 avec nom d'utilisateur et mot de passe fonctionne directement sur tous les builds à partir de la 151.
Exécutez Clearcote comme endpoint CDP permanent depuis l'image Docker officielle, serve() ou une CLI, et connectez n'importe quel framework sans toucher au code.
À lire aussi
Essayer Clearcote
S'utilise tel quel avec Playwright et Puppeteer, cohérent jusqu'au handshake TLS, avec un build open source comme point de départ.
Gratuit pour un navigateur : GitHub, une vérification de carte ou un compte Google d'entreprise. Jamais débité.