Migrar desde Fortress (versiones BSD)
Si ejecutas una de las versiones de Fortress con licencia BSD (v149, v150 o v151) como endpoint CDP, puedes pasar esa configuración a Clearcote cambiando la forma en que se inicia el navegador. El código que se conecta al endpoint no cambia.
Fortress pasó a su propia licencia source-available con la v3 (Chromium 153) el 30 de septiembre de 2026, y sus versiones anteriores conservan la licencia BSD-3. Esta guía es para equipos que usan una de esas versiones BSD y prefieren pasarse a Clearcote en lugar de a la v3. Para comparar licencias, precios y plataformas lado a lado, consulta Clearcote vs Fortress.
Qué cambia
| Si inicias Fortress con | Inicia Clearcote con |
|---|---|
Python: Fortress() de tilion-fortress, y luego f.cdp_url | serve() de clearcote, y luego srv.cdp_url |
Node: Fortress.launch(), y luego f.cdpUrl | await serve() de clearcote, y luego srv.cdpUrl |
Docker: tilion/fortress:149, :150 o :151 en el puerto 9222 | teamflatearth/clearcote en el puerto 9222 |
El lanzador tilion, o el binario con --remote-debugging-port=9222 | clearcote serve --port 9222 |
Todo lo que viene después de la llamada de conexión —tu código de Playwright, Puppeteer, browser-use, Crawl4AI o Stagehand— se queda como está. Algo que conviene revisar primero: el tag de imagen tilion/fortress:latest apunta a la v3 desde el 30 de septiembre de 2026, así que una configuración que descarga :latest ya no está en una versión BSD. Fija :149, :150 o :151 hasta que hayas hecho el cambio.
Python y Node: serve()
serve() inicia Clearcote con la configuración de lanzamiento del SDK (persona, proxy, valores por defecto) y un endpoint CDP en loopback, y devuelve un handle con la URL del endpoint. Pasa port=9222 si otro código espera la dirección anterior; si no lo pasas, serve() elige un puerto libre.
# pip install -U clearcote
from clearcote import serve
from playwright.sync_api import sync_playwright
with serve(fingerprint="acct-1", port=9222) as srv: # was: with Fortress() as f:
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(srv.cdp_url) # was: f.cdp_url
page = browser.contexts[0].new_page() # the served profile
page.goto("https://example.com")
print(page.title())
browser.close() # disconnect before the with blocks endclose() detiene el navegador, espera a que termine y elimina el perfil temporal que creó serve(); en Python, el bloque with lo llama por ti. Para browser-use, Crawl4AI o Stagehand, pon srv.cdp_url en su ajuste de CDP (Node: srv.cdpUrl). El SDK de .NET ofrece la misma llamada como ServeAsync. Más información en Puppeteer y otros clientes CDP.
Docker
Cambia la imagen y conserva el puerto. El cliente se conecta a la misma dirección que antes.
# was: docker run --rm -p 9222:9222 tilion/fortress:151
docker run -d --rm -p 127.0.0.1:9222:9222 -e CC_FINGERPRINT=acct-1 teamflatearth/clearcote
# the latest build: pass your key from the environment and keep the download in a volume
docker run -d --rm -p 127.0.0.1:9222:9222 -e CC_FINGERPRINT=acct-1 \
-e CLEARCOTE_LICENSE_KEY -v clearcote-cache:/opt/xdg-cache teamflatearth/clearcotebrowser = p.chromium.connect_over_cdp("http://localhost:9222") # unchanged
page = browser.contexts[0].new_page() # the container's own profile-p 127.0.0.1:9222:9222 mantiene el endpoint en esta máquina: un puerto CDP da control total del navegador, así que publícalo solo en redes de confianza. Define CC_FINGERPRINT para elegir o reutilizar una identidad: sin ella, las imágenes desde sdk-0.39.0 dan a cada contenedor su propio seed aleatorio, y las anteriores dan a todos el mismo. La imagen se configura por completo con variables de entorno (plataforma, idioma, zona horaria, proxy), que se enumeran en Despliegue.
Desde la shell: clearcote serve
Si iniciabas tú mismo el binario o el lanzador tilion y apuntabas los clientes al puerto 9222, clearcote serve (incluido en los paquetes de Python y Node) lo reemplaza como endpoint permanente. Una conexión sin parámetros recibe un navegador predeterminado compartido, así que los clientes existentes funcionan sin cambios; una conexión también puede pedir su propia identidad en la URL.
# was: tilion --headless=new --remote-debugging-port=9222 --user-data-dir=/tmp/p
clearcote serve --port 9222
# connect_over_cdp("http://127.0.0.1:9222") # the shared default browser
# connect_over_cdp("http://127.0.0.1:9222?fingerprint=acct-1") # a browser of its own for acct-1Qué funciona distinto
- La identidad sale de un seed. En las versiones BSD, el lanzador de Fortress aplica una sola persona de Windows predeterminada y coherente, y tú la cambias superficie por superficie con switches
--uxr-*(--uxr-timezone,--uxr-languages,--uxr-screen-width,--uxr-canvas-seed, etc.) o conTILION_TZ/TILION_LANG. Clearcote deriva toda la persona, incluido el ruido de canvas y WebGL por sitio, de un único seedfingerprint, así que el mismo seed da siempre la misma identidad y un seed nuevo da otra sin relación con la anterior. Dale a cada cuenta su propio seed en lugar de trasladar los valores--uxr-*uno por uno; define la plataforma conplatform, y la zona horaria y los idiomas contimezoneyaccept_language(Node:acceptLanguage), o deja que geoip los haga coincidir con el proxy. Consulta Configuración recomendada. - Abre las páginas en el perfil servido. Usa
browser.contexts[0]como en los ejemplos. Con Puppeteer, conéctate condefaultViewport: nullpara que la ventana conserve el tamaño que le dio la persona. - Dale el proxy a Clearcote, no al cliente. Pasa
proxyaserve(), o--proxyaclearcote serve, y activa geoip para que la zona horaria, los idiomas y la dirección WebRTC coincidan con la IP de salida. Un proxy con usuario y contraseña necesita el build más reciente; en el build abierto, usa uno que autorice por IP. Consulta Proxies y geoip. - Los switches y las variables de entorno propios de Fortress no tienen efecto aquí. Las opciones de Clearcote están en Opciones de lanzamiento y Flags de huella digital.
- La entrada humanizada es una opción de
launch(). Se ejecuta del lado de Playwright, así que no se aplica a un cliente conectado por CDP. - Las mismas plataformas que las versiones BSD: Windows x64 y Linux x64, y la imagen de Docker es x64.
Qué build de Clearcote obtienes
Sin clave de licencia, el SDK y la imagen ejecutan el build abierto: BSD-3, con cada parche público y reproducible, sobre Chromium 150, sin necesidad de cuenta. Con una clave ejecutan el build más reciente (Chromium 154), que agrega parches privados: gratis con GitHub para un navegador a la vez, y Pro para más. Guarda la clave con clearcote login o define CLEARCOTE_LICENSE_KEY; consulta Instalación.
Comprueba el cambio
Con el endpoint en ejecución, pregúntale qué es:
curl -s http://127.0.0.1:9222/json/version # the browser behind the endpoint
clearcote info # SDK, licence, cached build and a launch testclearcote info muestra el tag del build que resuelve y Launch test ok con la versión exacta del navegador. La guía de instalación indica qué versión debería reportar cada build y qué hacer cuando falla una comprobación.