La alternativa a playwright-stealth de código abierto
playwright-stealth es la forma más rápida de agregar stealth a Playwright en Python: un wrapper y cada página recibe un conjunto de evasiones en JavaScript. Pero esas evasiones son sobrescrituras sobre un navegador estándar, y su propio mantenedor lo describe como una prueba de concepto. Clearcote, en cambio, fija esos valores de forma nativa en el motor, así que no hay ninguna sobrescritura que una página pueda encontrar.
¿Qué es playwright-stealth?
playwright-stealth es un port a Python de puppeteer-extra-plugin-stealth para Playwright. El port original de AtuboDad no se actualiza desde mediados de 2024; el nombre en PyPI ahora lo lleva un fork con mantenimiento activo (Mattwmaster58), que publicó la 2.0 con una API más limpia e integró los pull requests pendientes. Tiene licencia MIT y se usa muchísimo: cerca de 2.4 millones de descargas al mes en PyPI.
Funciona registrando init scripts en cada contexto, cada uno de los cuales parchea una señal: navigator.webdriver, navigator.languages, los plugins, el vendor de WebGL, chrome.runtime, etc. El mantenedor es franco sobre sus límites. El README dice que no esperes que sortee nada más allá de la detección de bots más simple, y lo describe como un punto de partida. Las razones son estructurales: una sobrescritura de JavaScript se puede detectar con Function.prototype.toString o revisando el descriptor de la propiedad, los init scripts de la página no llegan a los Web Workers, y nada en el paquete toca los efectos secundarios de CDP del propio driver de Playwright ni la capa de red.
Clearcote vs playwright-stealth
| Característica | Clearcote | playwright-stealth |
|---|---|---|
| Enfoque | Parches en C++ a nivel del motor: valores nativos | Init scripts de JavaScript sobre un navegador estándar |
| Rastro detectable | Ninguno: nativo en la página, los iframes y los workers | Sobrescrituras visibles con toString, descriptores y relecturas desde workers |
| Identidad de la huella digital | Persona coherente a partir de un solo seed (canvas, WebGL, fuentes, navigator) | Unos pocos valores fijados a mano sobre los reales del host |
| Efectos secundarios del driver / CDP | Contenidos al lanzar (mundos aislados) y en el motor | No se abordan; driver de Playwright estándar |
| TLS / coherencia de red | El ClientHello sigue la versión de Chrome declarada | No se aborda |
| Framework | Playwright y Puppeteer (Python, Node, .NET) | Playwright (Python) |
| Configuración | Cambias el binario del navegador | Envuelves Playwright en una línea |
| Costo | Build abierto gratis; build más reciente gratis con GitHub; Pro $49/mes | Gratis y abierto (MIT) |
Comparación elaborada en septiembre de 2026. Licencia de playwright-stealth: Código abierto (MIT). Los detalles cambian, así que consulta su proyecto para ver lo más reciente.
Por qué los equipos eligen Clearcote
Nativo, no sobrescrito
Cada evasión de playwright-stealth reemplaza una función real del navegador por una de JavaScript, y ese reemplazo se puede observar. Clearcote cambia el valor dentro de Chromium, así que la función que inspecciona una página es la nativa real.
La misma respuesta en cada realm
Los init scripts parchean la página. Si vuelves a leer el mismo valor desde un Web Worker o un iframe nuevo, obtienes el original sin parchear. Los valores a nivel del motor coinciden en todas partes.
Una identidad completa, no un puñado de campos
Un seed de --fingerprint produce una máquina consistente en canvas, WebGL, audio, fuentes, pantalla y hardware, en lugar de unas pocas sobrescrituras apiladas sobre el host real.
Conserva tu código de Playwright
Clearcote es un binario de Chromium. Apunta executable_path a él, o usa el launch() del SDK, y el resto de tu script de Playwright queda igual.
Cuándo playwright-stealth puede ser mejor opción
- Quieres probar algo en cinco minutos contra un objetivo poco exigente y no quieres gestionar un binario de navegador.
- Tus objetivos solo revisan las señales obvias, como
navigator.webdriver. - Ya usas Clearcote y quieres saber si todavía lo necesitas: no. Sus evasiones duplican valores que el motor ya fija, y agregar sobrescrituras de JavaScript encima vuelve a introducir el rastro que el motor elimina.
Preguntas frecuentes
¿playwright-stealth todavía funciona?
Todavía se instala y funciona, y el fork mantenido (2.x) recibe actualizaciones. Que alcance o no depende del objetivo. Su propio README advierte que solo resuelve la detección más simple, porque las sobrescrituras de JavaScript se pueden detectar y no toca las capas del driver ni de red.
¿Qué diferencia hay entre playwright-stealth y Clearcote?
playwright-stealth inyecta JavaScript en un Chromium estándar para sobrescribir un conjunto de valores. Clearcote es un Chromium modificado en el que esos valores son nativos y consistentes entre frames y workers, con una huella digital TLS acorde por debajo. Los dos se controlan con Playwright normal.
¿Debería usar playwright-stealth junto con Clearcote?
No. El motor ya reporta valores coherentes, y apilar sobrescrituras de JavaScript encima reemplaza funciones nativas por otras detectables. Lanza Clearcote con Playwright a secas.
¿Existe un playwright-stealth para Node.js?
El equivalente en Node es playwright-extra con el plugin stealth de puppeteer-extra, que tiene el mismo diseño basado en sobrescrituras de JavaScript. Clearcote funciona igual desde Python, Node y .NET.
Lecturas relacionadas
Prueba la alternativa de código abierto basada en Chromium
Gratis y de código abierto, un reemplazo directo para Playwright y Puppeteer, coherente hasta el handshake TLS.
Gratis para un navegador con GitHub. Sin tarjeta.