Saltar al contenido
SDK · Python · Node · .NET

Un navegador stealth para Playwright y Puppeteer

Clearcote es Chromium, así que la automatización que ya tienes sigue funcionando. Cambia la llamada de lanzamiento por el launch() del SDK y obtienes un handle de Playwright que se maneja como un Browser (sobre un perfil desechable, así que newContext() devuelve ese mismo contexto), ejecutando un build cuyos controles de identidad están compilados en el motor en lugar de inyectados como JavaScript.

El build abierto no requiere cuenta. El build más reciente es gratis con GitHub para un navegador a la vez.

Cambia la línea de lanzamiento y conserva todo lo demás

# 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()

Lo más destacado

Una migración de una línea

launch() devuelve un handle de Playwright sobre un perfil desechable, de modo que los selectores y los page objects se quedan como están; su newContext() devuelve ese mismo contexto, así que pasa ephemeralProfile: false donde necesites contextos aislados. Puppeteer se conecta al endpoint CDP de serve() con puppeteer.connect.

Un binario verificado, descargado por ti

En el primer uso, el SDK descarga el build correspondiente y verifica su SHA-256: el build abierto contra los hashes integrados en el SDK, y el build con licencia contra el hash que devuelve su descarga. La actualización automática opcional (solo del build abierto) compara la versión más reciente con sus checksums publicados, y con su firma GPG si gpg está instalado.

La identidad como opciones con nombre

fingerprint, platform, brand, timezone, acceptLanguage, proxy y geoip son argumentos, no flags que tengas que recordar. Un solo seed mantiene estable una identidad entre ejecuciones.

Valores por defecto coherentes

Los lanzamientos con interfaz omiten el viewport emulado para que el tamaño de la página coincida con la ventana real, WebRTC mantiene privada la dirección de tu máquina y QUIC se desactiva detrás de un proxy para que nada de UDP salga por fuera de él.

Entrada humanizada, un flag

humanize: true envía los clics, la escritura, los arrastres y el scroll como entrada nativa confiable por trayectorias curvas, con navigator.webdriver en false.

Tres lenguajes

Python (síncrono y asíncrono), Node y .NET, en PyPI, npm y NuGet. .NET también tiene geoip, y entrada humanizada mediante llamadas explícitas del estilo de HumanClickAsync; los perfiles guardados, las verificaciones de coherencia de renderizado, Widevine y los helpers de agente son solo para Python y Node por ahora.

Lo que el SDK hace por ti

El paquete envuelve el binario de Clearcote para que las opciones de identidad se conviertan en argumentos con nombre. Resuelve el navegador en un orden fijo (una ruta explícita, la variable de entorno CLEARCOTE_BINARY, una version que hayas pedido, el build con licencia más reciente si encuentra una clave de licencia y, por último, el build abierto fijado en el SDK), lo verifica y lo guarda en caché, lo lanza mediante Playwright y te devuelve los objetos que tu código ya usa.

Como los controles viven en el motor C++, no hay ningún plugin stealth que cargar ni nada inyectado en la página. Un plugin parchea propiedades desde JavaScript, y un getter parcheado se puede distinguir de uno nativo. Aquí el getter es el nativo, en el frame principal, en los iframes y en los workers. Cómo funciona la detección explica por qué eso importa.

Dos cosas se comportan de forma distinta a Chromium estándar, ambas a propósito. Los eventos de consola y de error de página no se reenvían al cliente de automatización, porque reenviarlos es justo lo que mide una prueba de detección de automatización; recógelos en la página y léelos con page.evaluate(). Y en el build con licencia (gratis con GitHub), un proxy SOCKS5 con usuario y contraseña funciona directamente, pasando las credenciales como campos username y password separados, porque el motor implementa la autenticación que le falta a Chromium estándar. El build abierto no puede autenticarse en un proxy SOCKS5.

Un plugin stealth frente a un navegador a nivel del motor

Plugin stealth de JavaScript
Clearcote
Dónde vive el cambio
Script inyectado en cada página y frame
Compilado en el motor de Chromium
Verificaciones de funciones nativas
Un getter parcheado, convertido en string, muestra su propio código fuente
El getter es código nativo, así que reporta [native code]
Workers e iframes
Hay que volver a parchear cada realm, y los huecos se notan
Los mismos valores en todas partes, desde un solo motor
TLS y HTTP/2
Lo que envíe el navegador subyacente
El propio handshake de Chrome del motor, acorde con la versión que reporta la persona
Configuración
Un plugin, sus evasiones y sus opciones
Una llamada a launch()

Los plugins stealth de código abierto son un primer paso razonable, y muchos proyectos empiezan por ahí. Consulta la comparación con puppeteer-extra-plugin-stealth para tener un panorama más completo.

Para qué se usa

Scraping y recolección de datos

Conserva tu crawler de Playwright o Puppeteer y cambia lo que tiene debajo.

Pruebas end-to-end en páginas reales

Prueba flujos en sitios que tratan al Chromium automatizado estándar de forma distinta que a un navegador normal.

Migrar una suite existente

Los selectores y los page objects se quedan igual y solo cambia la llamada de lanzamiento. Los fixtures que abren un contexto nuevo por prueba necesitan ephemeralProfile: false, porque el newContext() de launch() devuelve su único contexto de perfil.

Investigación de fingerprinting

Ejecuta los mismos scripts con y sin persona y compara lo que mide una página.

Clearcote está hecho para la privacidad, las pruebas, la investigación y la automatización lícita. Tú eres responsable de cómo lo usas y de respetar los términos de los sitios que visitas.

Qué plan lo incluye

El SDK está en los tres planes, y también casi todas las opciones de identidad (las pocas que requieren el build con licencia están marcadas en la lista de flags de huella digital). Sin clave, ejecuta el build abierto. Con una clave de licencia (gratis con una cuenta de GitHub), ejecuta el build más reciente, con los extras exclusivos del build con licencia que se detallan en la página de precios.

Comparar planes

Preguntas frecuentes

¿De verdad es un reemplazo directo?

Casi del todo. El launch() síncrono de Python y Node devuelve un handle con aspecto de navegador sobre un perfil desechable: newPage() y todo lo que sigue funcionan como antes, pero newContext() devuelve ese mismo contexto, así que el código que necesite contextos aislados debe pasar ephemeralProfile: false o lanzar un navegador por contexto. launchPersistentContext() devuelve un BrowserContext estándar. Puppeteer se conecta al endpoint CDP de serve() con puppeteer.connect, y el SDK de .NET devuelve objetos estándar de Microsoft.Playwright (IBrowserContext desde LaunchEphemeralProfileAsync, IBrowser desde LaunchAsync).

¿Sigo necesitando puppeteer-extra-plugin-stealth o playwright-stealth?

No, y es mejor no agregar uno. Esos plugins parchean valores desde JavaScript inyectado, y el propio parcheo se puede notar. Clearcote define los valores en el motor, así que a un plugin no le queda nada que parchear.

¿Funciona en modo headless?

Sí. El modo con interfaz sigue siendo la opción por defecto más segura donde puedas usarlo, porque el modo headless tiene sus propios indicios. En contenedores, la imagen de Docker oficial se ejecuta por defecto con interfaz bajo una pantalla virtual.

¿Qué lenguajes son compatibles?

Python (API síncrona y asíncrona), Node.js y .NET. Los tres tienen coincidencia geoip y entrada humanizada (un flag de lanzamiento en Python y Node, llamadas explícitas del estilo de HumanClickAsync en .NET). Los perfiles guardados, las verificaciones de coherencia de renderizado, Widevine y el agente integrado en el navegador son solo para Python y Node por ahora.

¿Cómo mantengo la misma identidad entre ejecuciones?

Reutiliza el mismo seed de fingerprint y usa launchPersistentContext con un directorio de datos de usuario para que las cookies y el almacenamiento persistan. Derivar el seed del id de tu propia cuenta o tenant lo hace reproducible. Consulta identidades persistentes.

Profundiza en la documentación

Características relacionadas

Prueba Clearcote

Un reemplazo directo para Playwright y Puppeteer, coherente hasta el handshake TLS, con un build de código abierto para empezar.

Gratis para un navegador con GitHub. Sin tarjeta.