
invisible_playwright v0.7.0
Sigilo de navegador antidetect gratuito para Playwright: huella digital de Firefox headless indetectable. Scraping en Python, bypass de recaptcha y detección de bots. Código abierto.
Sigilo antidetect gratuito para Playwright: huella de Firefox indetectable, con o sin headless.
Web scraping en Python y bypass de captchas. Código abierto, y supera todas las pruebas de detección de bots.

Cómo funciona
Los antibots hacen dos preguntas, y reCAPTCHA, hCaptcha y Cloudflare Turnstile puntúan las respuestas. invisible_playwright responde sí a ambas.
1. ¿Es un navegador real? Sí. Es Firefox, parcheado a nivel de código fuente en C++.
- La huella del navegador se establece dentro del motor, no se inyecta en la página: navigator, pantalla, GPU/WebGL, canvas, fuentes, audio, WebRTC, zona horaria, red. Con o sin headless, los mismos valores en ambos casos.
- Sin shim de JS, sin override, sin costura que leer.
2. ¿Lo usa una persona real? Sí. Las acciones se humanizan en el driver.
- Cada clic, hover y arrastre sigue una trayectoria natural del ratón con tiempos humanos, sin cursor teletransportado.
- Cada entrada es byte-idéntica a un ratón real: fuente de entrada real, presión, eventos de confianza.
Impulsado por la API estándar de Playwright. Desglose completo: feder-cr/firefox_antidetect_patch.
¿Sigues viendo captchas o antibots? Es el proxy.
Una vez que el navegador está gestionado, deja de ser la variable. Si todavía te bloquean, la pista ya no es el navegador, es la IP desde la que vienes. Alrededor del 90% de los proxies son públicos: cualquiera puede alquilar la misma dirección, así que ya es conocida y está en las listas de IPs bloqueadas que consultan los sitios. Un navegador perfecto en una IP conocida sigue perdiendo.
Instalación
pip install invisible-playwright
python -m invisible_playwright fetch # descarga única de ~238 MB (~544 MB descomprimido), verificado con sha256
Plataformas compatibles: Windows x86_64, Linux x86_64 / arm64. macOS ya no es compatible (los lanzamientos se detuvieron en firefox-20); en un Mac, el paquete se niega a iniciar con un mensaje claro en lugar de descargar un binario que ya no existe.
Uso
Huella aleatoria por sesión
100% compatible con Playwright - síncrono y asíncrono, todos los métodos, cero cambios en la API. Si ya usas Playwright, cambiar son dos líneas:
- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
- browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:
Cada sesión obtiene una huella distinta (GPU, audio, fuentes, pantalla, ~200 campos) y movimiento de ratón con curvas de Bézier.
Síncrono
from invisible_playwright import InvisiblePlaywright
with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = browser.new_page()
page.goto("https://example.com")
page.click("#submit") # el ratón se desplaza al botón en una curva de Bézier
Asíncrono
from invisible_playwright.async_api import InvisiblePlaywright
async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = await browser.new_page()
await page.goto("https://example.com")
await page.click("#submit")
El objeto browser es un playwright.sync_api.Browser / playwright.async_api.Browser - todos los métodos de Playwright funcionan tal cual.
Registra la semilla para reproducir una ejecución:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
Huella reproducible
with InvisiblePlaywright(seed=42) as browser:
... # misma GPU, mismo hash de canvas, mismo contexto de audio, en cada ejecución
Proxies
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
Esquemas compatibles: socks5, socks4, http, https. El DNS se enruta a través del proxy por defecto, sin fugas locales.
Zona horaria
La zona horaria del navegador sigue a timezone=:
# por defecto: la zona horaria se deriva automáticamente de la IP de salida (salida del proxy si
# hay un proxy configurado, si no, la IP pública del propio host)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# la zona IANA explícita siempre gana, la única forma de forzar una zona específica
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
Fijar campos específicos de la huella
Por defecto todo viene de seed. Para forzar valores específicos mientras el resto se deriva de la semilla:
with InvisiblePlaywright(
seed=42,
pin={
"gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)",
"gpu.vendor": "Google Inc. (NVIDIA)",
"screen.width": 2560,
"screen.height": 1440,
"hardware.concurrency": 16,
},
) as browser:
...
La lista completa de claves fijables, cómo interactúa el fijado con el muestreador bayesiano, y los patrones comunes están en docs/pinning.md.
CLI
El comando instalado es invisible-playwright, con guion. python -m invisible_playwright funciona de forma idéntica y no necesita nada en PATH.
invisible-playwright fetch # descarga el motor si falta, verifica cada uno en caché
# contra el sello, imprime la ruta
invisible-playwright version # versiones del wrapper, núcleo y motor, y dónde está
# el motor en caché
Documentación, guías y comparativas
Todo se lee mejor, y es buscable, en la wiki, organizado en cuatro secciones en lugar de una sola lista plana:
- Documentación - instalación, el cambio de dos líneas desde Playwright puro, configuración de proxy/zona horaria, fijado de campos específicos, la CLI.
- Guías - cómo funciona realmente la detección, en siete grupos: identidad del navegador, canvas/WebGL/fuentes/ audio, red y WebRTC, la capa de automatización, agentes de IA, los propios detectores explicados desde el código fuente, y pruebas.
- Comparativas - contra Camoufox, Patchright, nodriver y playwright-stealth, y el caso de Firefox sobre Chromium en general.
- Integraciones - Scrapy, Crawlee, Robot Framework, CodeceptJS, ejecutores de pruebas, Playwright MCP, y los frameworks con los que no encaja, por nombre.
Si no sabes por dónde empezar: Tres formas de hacer Playwright indetectable es el mapa al que la mayoría de las otras páginas enlazan, Playwright detectado como bot en un sitio es el orden de resolución de problemas, y navigator.webdriver no es la pista que crees explica la propiedad más famosa en este espacio y por qué parchearla solo te aporta casi nada.
- crawl4ai stealth y motores de navegador personalizados - browser_type acepta firefox pero no hay executable_path; dónde está la costura del adaptador
- Por qué los navegadores headless renderizan fuentes diferentes - las tres causas, los conjuntos de fuentes por plataforma, y por qué la solución no es instalar más fuentes
- Cómo hacer que Linux y macOS reporten fuentes reales de Windows - un manifiesto, tres backends de fuentes convencidos de no preguntar al host, y las cuatro costuras aún abiertas
- measureText y TextMetrics como superficie de fingerprinting - más de diez números de una sola llamada sin necesidad de permiso, y los dos errores que cometimos al arreglarlo
- Qué hace realmente privacy.resistFingerprinting - y por qué este proyecto lo establece en false a propósito
- La variable cdc_ de ChromeDriver - por qué renombrarla no es eliminarla, y a qué se generaliza eso
- Qué comprueba realmente bot.sannysoft.com - fila por fila, y la prueba de canvas-en-iframe que nadie lee
- Cómo decide CreepJS que estás mintiendo - cuatro técnicas de detección, y por qué bloquear la sonda también se registra
- Preferencias de Firefox que no hacen nada en silencio - cinco razones, empezando por la que nos costó un bug real
- Qué detecta realmente BotD - veinte detectores, y por qué la mayoría no tratan de bots en absoluto
- Por qué cambia el ID de visitante de FingerprintJS - es un hash de 41 componentes, así que si uno se mueve, todo se mueve
Proyectos relacionados
Los vecinos de código abierto, y para qué sirve cada uno.
En el lado de Firefox
- Camoufox - un Firefox antidetect que también parchea a nivel de C++. Cubre una superficie más amplia y trae su propia base de datos de huellas; este proyecto deriva una huella de una semilla con un muestreador bayesiano, así que un número reproduce una máquina. Comparativa completa.
- LibreWolf - un fork de Firefox con ajustes de privacidad por defecto. Trae un binario configurado para que la gente navegue con él; este trae parches de código fuente más un wrapper de automatización.
- arkenfox/user.js - endurecimiento de Firefox mediante preferencias. Donde una preferencia es suficiente, úsala; este proyecto parchea C++ donde no lo es.
En el lado de Chromium
- Patchright - un fork parcheado de Playwright, así que el trabajo de sigilo recae en el driver en lugar de en el binario del navegador. Comparativa completa.
- nodriver - el sucesor de
undetected-chromedriver, que maneja Chrome directamente sobre CDP y elimina las pistas con sabor a WebDriver. Comparativa completa. - playwright-stealth - un parche de script de inicio aplicado antes de que cargue la página. Su propio mantenedor lo llama prueba de concepto; comparativa completa.
- puppeteer-extra-plugin-stealth - el original de este linaje de scripts de inicio, todavía ampliamente recomendado. El último commit sustancial de su repositorio es de mediados de 2024; qué significa eso en la práctica.
- selenium-stealth - el mismo enfoque en Selenium/CDP. El último commit de su repositorio es de diciembre de 2021; qué significa eso en la práctica.
- pyppeteer - el port no oficial de Puppeteer a Python. Su propio README dice que no está mantenido y apunta a
playwright-pythonen su lugar; de qué trata realmente esa recomendación. - rebrowser-patches - corrige la fuga de CDP
Runtime.enableen Chromium, convergiendo de forma independiente hacia casi la misma corrección que usa Patchright. Comparativa completa. - fingerprint-suite - genera una huella coherente con una red bayesiana, cercana al enfoque de generación de este proyecto, y luego la inyecta en una página de Playwright o Puppeteer, ya sea en Chromium o Firefox. Comparativa completa.
- playwright-with-fingerprints - inyecta valores de huella de un servicio remoto de pago, solo Windows, fijado a una compilación específica de Chromium. Comparativa completa.
Cuál de estos encaja depende de la capa en la que esté tu problema, y de si necesitas Firefox o Chromium. Tres formas de hacer Playwright indetectable recorre lo que cada capa puede y no puede alcanzar, incluido lo que cuesta esta.
Si estás eligiendo entre motores en lugar de herramientas, ten en cuenta que una gran parte de los frameworks de agentes de IA manejan Chromium sobre CDP, lo que decide la pregunta por ti: Agentes de navegador de IA y sigilo.
Licencia
MIT - ver LICENSE. El binario de Firefox parcheado se distribuye bajo MPL-2.0 (licencia upstream de Firefox). Los parches de C++ contra mozilla-central que producen ese binario están en feder-cr/firefox_antidetect_patch.
Aviso legal
Este proyecto es solo para fines educativos. Se proporciona tal cual, sin garantías. No me hago responsable de cómo se use. Úsalo bajo tu propio riesgo y cumpliendo las leyes de tu jurisdicción.
Construido por Federico Elia