Aller au contenu
Docker · serve() · CDP

Un navigateur anti-détection en un seul docker run

Récupérez l'image officielle et vous avez un navigateur Clearcote qui écoute sur un port CDP. Pointez-y Playwright, Puppeteer, browser-use, Crawl4AI ou Stagehand : votre code reste tel quel. L'image lance le binaire directement, sans le switch d'automatisation, et navigator.webdriver reste à false.

Sans clé, l'image exécute le build ouvert. Ajoutez une clé GitHub gratuite pour obtenir le dernier build.

Lancez-le, connectez-vous-y

# CDP on http://localhost:9222, published to this host only
docker run -d --rm -p 127.0.0.1:9222:9222 --shm-size=1g teamflatearth/clearcote

Points clés

Un binaire vérifié, intégré à l'image

L'image embarque le build ouvert pour Linux, vérifié par SHA-256, ainsi que des clones métriquement compatibles des polices Windows courantes : le texte latin se mesure comme avec les polices du persona. Le bundle de polices du build ouvert ne contient aucune police CJK ; celui du build sous licence, si.

Configuré par variables d'environnement

Seed, plateforme, marque, langue, fuseau horaire et profil TLS sont des variables d'environnement CC_*. Aucun code à maintenir dans le conteneur.

Le dernier build à la demande

Définissez CLEARCOTE_LICENSE_KEY et le conteneur récupère le build sous licence le plus récent ou, en Pro, un build épinglé avec CC_VERSION.

serve() et une CLI

Pas de Docker ? serve() en Python, Node ou .NET, ou clearcote serve depuis un shell, effectue le même lancement direct et vous donne une URL CDP.

N'importe quel client CDP

connectOverCDP de Playwright, puppeteer.connect, browser-use, Crawl4AI, Stagehand, ou le DevTools Protocol brut sur le port.

Un Dockerfile auditable

Le Dockerfile et son entrypoint se trouvent dans le dépôt public : vous pouvez lire exactement ce que l'image installe et exécute, et la construire vous-même. Cela couvre l'image et le build ouvert qu'elle embarque ; avec une clé de licence, le conteneur télécharge le moteur sous licence au démarrage.

Comment le conteneur est configuré

Le conteneur démarre Clearcote directement, et non via un driver de test, et expose le Chrome DevTools Protocol sur le port 9222. Tout l'intérêt du lancement direct est là : les frameworks d'automatisation ajoutent des switches de lancement qui les trahissent, et un endpoint permanent démarré par l'image ne les transmet jamais.

Le persona par défaut est une identité Linux native cohérente, et ce choix est délibéré. Une partie de ce qu'une page peut lire vient du système d'exploitation sous le navigateur : dans un conteneur Linux, le texte est mis en forme par FreeType et les polices viennent de fontconfig, quel que soit le user agent annoncé. Mesures sur cette image avec un persona Windows : un pas de 0,01 px sur la taille de police a modifié la largeur du texte dans 66 % des cas, contre 99 % sur un vrai Chrome Windows. Pour une identité Windows, exécutez le build Windows, ou les navigateurs hébergés, qui tournent sur des machines Windows.

Un conteneur sous licence télécharge son moteur au premier démarrage et obtient un bail de concurrence : il a donc besoin d'un accès sortant à l'API de licence. Montez le volume de cache pour que le moteur soit téléchargé une seule fois, et non par chaque nouveau conteneur.

Ce qui se connecte via CDP

ClientComment
Playwrightchromium.connect_over_cdp(url) / connectOverCDP(url)
Puppeteerpuppeteer.connect({ browserURL: url, defaultViewport: null })
browser-use · Crawl4AI · StagehandFaites pointer leur paramètre d'endpoint CDP vers l'URL
Tout autre client qui parle CDPLe DevTools Protocol brut sur le port publié

Cas d'usage

Scrapers sous Compose ou Kubernetes

Un service de navigateur à côté de vos workers, entièrement configuré par variables d'environnement.

Frameworks d'agents

Donnez à browser-use, Crawl4AI ou Stagehand une URL CDP au lieu d'un Chrome local.

CI reproductible

Un tag d'image épinglé donne le même build ouvert à chaque exécution du pipeline ; avec une clé de licence, seul le CC_VERSION de Pro épingle le build sous licence.

N'importe quel langage

Tout ce qui dispose d'un client CDP, de Python et Node à Go ou Rust, peut piloter l'endpoint.

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.

Offres qui l'incluent

L'image Docker, serve() et l'endpoint CDP sont inclus dans toutes les formules. Par défaut, l'image exécute le build ouvert ; fournissez une clé de licence (gratuite avec GitHub pour un navigateur à la fois) pour exécuter le dernier build. La limite d'un navigateur d'une clé gratuite s'applique à l'ensemble de vos conteneurs.

Comparer les offres

FAQ

De quelle image Docker s'agit-il ?

teamflatearth/clearcote sur Docker Hub, construite à partir du Dockerfile du dépôt public clearcote-browser. Lancez docker pull teamflatearth/clearcote pour mettre à jour une copie plus ancienne.

Peut-on publier le port 9222 sans risque ?

Uniquement sur un réseau de confiance. Un endpoint CDP donne le contrôle total du navigateur. Publiez-le en local sur l'hôte avec -p 127.0.0.1:9222:9222, ou gardez-le sur un réseau privé, et ne l'exposez jamais sur une interface publique.

Le conteneur peut-il présenter une identité Windows ?

Vous pouvez définir CC_PLATFORM=windows, mais dans un conteneur Linux, les métriques de police et les polices système viennent toujours de Linux, et un test d'empreinte le remarque. Le persona Linux par défaut est cohérent. Pour une identité Windows, exécutez le build Windows sous Windows, ou utilisez les navigateurs hébergés.

Comment exécuter le build sous licence dans Docker ?

Définissez CLEARCOTE_LICENSE_KEY et montez un volume sur /opt/xdg-cache pour que le moteur ne soit téléchargé qu'une fois. Il faut une image construite à partir du SDK 0.26.1 ou plus récent, et 0.30.0 ou plus récent pour une clé GitHub gratuite. Le log de démarrage indique quel moteur vous avez obtenu et si le bail de licence a été acquis.

Pourquoi navigator.webdriver reste-t-il à false ?

Le moteur ne le définit plus à partir de --enable-automation, le switch qu'utilise l'automatisation standard, et de toute façon l'image démarre le navigateur sans ce switch. Connecter ensuite un client via CDP n'y change rien.

Aller plus loin dans la documentation

Fonctionnalités associées

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 avec GitHub. Sans carte.