Volver al blog

nodriver vs Patchright: Automatización de Navegador No Detectada en Python

Ethan Brown
Ethan Brown

Advanced Bot Mitigation Engineer

10-Jul-2026

TL;DR:

  • nodriver y Patchright son herramientas de automatización a nivel de controlador indetectables: ocultan las señales que marcan una sesión como automatizada, en lugar de enviar un nuevo motor de navegador como lo hacen Obscura o Lightpanda.
  • nodriver es el sucesor de undetected-chromedriver: un marco de trabajo Python asíncrono que se comunica directamente con el Protocolo de DevTools de Chrome, sin Selenium y sin el binario chromedriver, por lo que las señales clásicas del controlador están ausentes por diseño. Es AGPL-3.0 y ha superado las 4,000 estrellas en GitHub.
  • Patchright es un reemplazo directo para Playwright Python que corrige las filtraciones que la propia superficie de automatización de Playwright expone: misma API, from patchright.sync_api import sync_playwright, con licencia Apache-2.0.
  • Ambos reportan navigator.webdriver como false desde el principio: verificado en vivo a continuación en cada uno, que es la primera señal que la mayoría de los detectores de bots leen.
  • Ninguno proporciona IPs ni resuelve páginas de desafío. La sigilo a nivel de controlador oculta la automatización; no hace nada por la reputación de IP ni un muro de validación de tráfico. Scrapeless Scraping Browser añade proxies residenciales en más de 195 países y manejo de desafíos a la misma sesión.
  • Gratis para empezar. Nuevas cuentas de Scrapeless incluyen tiempo de ejecución gratuito de Scraping Browser: regístrate en app.scrapeless.com.

Introducción: dos formas de lucir indetectable, una cosa que no hacen

Los sistemas anti-bot detectan la automatización en dos lugares amplios: el navegador (superficies de huellas como WebGL y fuentes) y el controlador (la maquinaria que controla el navegador: la propiedad navigator.webdriver de la especificación W3C WebDriver, artefactos del Protocolo de DevTools de Chrome, el control de automatización que las herramientas estándar exponen). Las herramientas a nivel de motor como un Firefox parcheado reformulan lo primero. nodriver y Patchright atacan lo segundo: mantienen un Chromium normal, pero eliminan las señales que una pila de automatización normal deja atrás.

Se acercan desde direcciones opuestas. nodriver elimina Selenium por completo y controla Chrome a través del Protocolo de DevTools desde Python asíncrono. Patchright mantiene Playwright tal como está y corrige las filtraciones por debajo, por lo que el código existente de Playwright funciona sin cambios. Esta guía instala ambos, ejecuta la misma tarea a través de cada uno, muestra la limitación compartida que ninguno resuelve y explica cómo un navegador en la nube gestionado llena ese vacío.

Qué son estas herramientas — y qué significa "a nivel de controlador"

El sigilo a nivel de controlador se trata de cómo se controla el navegador, no de lo que es el navegador. Una sesión estándar de Selenium o Playwright filtra su naturaleza a través de artefactos de canal de control: la propiedad navigator.webdriver configurada en true, ganchos de tiempo de ejecución de CDP, una extensión de automatización. Los detectores buscan exactamente esto. nodriver y Patchright los eliminan mientras te mantienen en un Chromium ordinario.

nodriver es el sucesor mantenido del ampliamente utilizado undetected-chromedriver. Es un marco de trabajo Python asíncrono que habla directamente con CDP: sin ejecutable chromedriver, sin capa de webdriver Selenium, por lo que no hay un binario de webdriver para identificar en primer lugar. Su propia descripción lo enmarca como un marco rápido para automatización y raspado que supera sistemas como Cloudflare y hCaptcha, y tiene licencia AGPL-3.0.

Patchright toma la ruta de compatibilidad: es una reimplementación indetectable del paquete Playwright Python que corrige las filtraciones de detección en la superficie de automatización de Playwright. Lo instalas en lugar de Playwright y cambias una importación; todo lo demás: selectores, contextos, evaluate — es el Playwright que ya escribes. Es Apache-2.0, una licencia más permisiva que el copyleft de nodriver, lo que puede importar cuando lo integras en un producto comercial.

Instalar ambos

nodriver se instala desde PyPI y trae su propio manejo de Chrome; Patchright se instala como Playwright y descarga una versión de Chromium:

bash Copy
# nodriver — marco asíncrono de CDP, sucesor de undetected-chromedriver
pip install nodriver

# Patchright — Playwright indetectable de reemplazo, más su versión de Chromium
pip install patchright
patchright install chromium

nodriver: CDP asíncrono, sin capa de webdriver

La API de nodriver es asíncrona y nativa de CDP. Esto lanza Chrome, navega y lee la bandera de automatización:

python Copy
import nodriver as uc

async def main():
    browser = await uc.start(headless=True)
    page = await browser.get("https://example.com")
    await page.sleep(1)

    print("TITULO:", await page.evaluate("document.title"))
    print("WEBDRIVER:", await page.evaluate("navigator.webdriver"))

    browser.stop()

nodriver envía su propio ayudante de bucle para que la limpieza se mantenga limpia

uc.loop().run_until_complete(main())

Copy
Esto imprime `TÍTULO: Dominio de ejemplo` y `WEBDRIVER: False`. No hay un proceso `chromedriver` y no hay Selenium en la pila — el canal de control es CDP en bruto, por lo que la señal del webdriver está ausente en lugar de ser parcheada. Usar `uc.loop()` en lugar de un `asyncio.run` puro mantiene la limpieza de la limpieza del bucle de eventos propio de nodriver.

## Patchright: el mismo Playwright, menos las filtraciones

Si ya tienes código de Playwright, Patchright es un cambio de una línea: solo cambian la importación y nada más:

```python
# El único cambio de Playwright: importar de patchright, no de playwright
from patchright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com")

    print("TÍTULO:", page.title())
    print("WEBDRIVER:", page.evaluate("navigator.webdriver"))

    browser.close()

Esto también imprime WEBDRIVER: False. Debido a que la API es idéntica a la de Playwright, un raspador existente de Playwright adopta la discreción de Patchright simplemente cambiando la importación — sin reescritura, sin nuevo modelo mental.

Obtén tu clave de API en el plan gratuito: app.scrapeless.com

¿Cuál elegir? — y la brecha que ambos dejan abierta

Elegir entre ellos depende de tu punto de partida. Si estás escribiendo nuevo código asíncrono en Python y deseas el camino más ligero y directo de CDP sin legado de Selenium, nodriver es la opción — ten en cuenta su copyleft AGPL-3.0 antes de incorporarlo comercialmente. Si tienes código de Playwright o un equipo fluido en la API de Playwright, Patchright te ofrece la misma superficie con las filtraciones parcheadas y una licencia permisiva Apache-2.0. Ambos te mantienen en Chromium ordinario; ninguno te pide que aprendas un nuevo motor.

La brecha que comparten es la parte importante. La discreción a nivel de controlador oculta que una sesión es automatizada. No cambia de dónde proviene la sesión y no responde a una página de desafío. Tres modos de fallo están completamente fuera de lo que estas herramientas abordan:

  • Reputación de IP. Tus solicitudes salen de la IP de tu máquina. Un objetivo que bloquea rangos de centros de datos o impone límites de tasa a tu dirección bloquea una sesión libre de webdriver tan rápidamente como lo haría una sesión ingenua.
  • Páginas de desafío. Un intersticial de validación de tráfico aún necesita resolverse. Lucir no automatizado disminuye la frecuencia con la que aparece; no elimina las que aparecen.
  • Profundidad de huellas dactilares. Estas herramientas se centran en el canal de control, no en la superficie completa de huellas dactilares a nivel de motor que reescribe un navegador anti-detectores dedicado.

Los tres son problemas de red e infraestructura, y ninguna biblioteca a nivel de controlador los resuelve porque no son problemas a nivel de controlador.

Dónde encaja Scrapeless Scraping Browser

Cuando el objetivo se basa en reputación de IP o sirve desafíos — no solo en la bandera del webdriver — las piezas faltantes son la salida residencial y el manejo de desafíos. Scrapeless Scraping Browser ofrece ambos en una sesión administrada: un navegador en la nube anti-detección impulsado por Chromium desarrollado internamente, con proxies residenciales en más de 195 países seleccionados por sesión, expuestos como un punto final CDP. Dado que Patchright es Playwright, conectarse a él es la misma llamada connect_over_cdp que ya usa Playwright:

python Copy
import os
from playwright.sync_api import sync_playwright

# Cloud Chromium con salida residencial — el nivel de IP + desafío
API_KEY = os.environ["SCRAPELESS_API_KEY"]
ws_endpoint = (
    "wss://browser.scrapeless.com/api/v2/browser"
    f"?token={API_KEY}&session_ttl=180&proxy_country=US"
)

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(ws_endpoint)
    page = browser.contexts[0].new_page() if browser.contexts else browser.new_page()
    page.goto("https://example.com", wait_until="domcontentloaded")
    print("TÍTULO:", page.title())
    browser.close()

El patrón práctico es uno escalonado: nodriver o Patchright para ejecuciones autoalojadas contra objetivos que solo revisan el controlador, y una sesión Scrapeless para los objetivos que también valoran la IP y emiten desafíos. La documentación de Scrapeless tiene la referencia completa de parámetros, y el precio se basa en el uso con una capa gratuita. Para la mitad de páginas de desafío específicamente, el tutorial sobre resolver Cloudflare con Python muestra cómo la sesión administrada despeja lo que una pila solo de controladores no puede.

Conclusión: oculta el controlador y luego resuelve la red

nodriver y Patchright son las dos respuestas a nivel de controlador más fuertes contra la detección de automatización: nodriver al descartar Selenium por CDP directo, y Patchright al parchear Playwright en su lugar; ambas eliminan la bandera webdriver que primero verifica cualquier detector. Elige según las necesidades de tu base de código y licencia, y ten claro el límite: ocultan la automatización, no la infraestructura.

Para objetivos que también juzgan la reputación de IP y lanzan desafíos, mantén una sesión de Scrapeless Scraping Browser en la rotación. Todo aquí habla de CDP o Playwright, por lo que enrutar una solicitud desde una ejecución sigilosa autoalojada a una sesión en la nube gestionada es solo un cambio de cadena de conexión, no una reescritura.


¿Listo para construir tu canal de datos impulsado por IA?

Únete a nuestra comunidad para reclamar un plan gratuito y conectarte con desarrolladores que construyen canales de automatización no detectables: Discord · Telegram.

Regístrate en app.scrapeless.com para obtener el tiempo de ejecución gratuito de Scraping Browser y enrutar tus objetivos de IP y desafíos a través de él mientras nodriver o Patchright manejan los únicos de controlador.

FAQ

Q: ¿Cuál es la diferencia entre nodriver y Patchright?
nodriver es un marco asíncrono que controla Chrome directamente a través de CDP sin Selenium ni chromedriver, y es el sucesor de undetected-chromedriver. Patchright es un reemplazo directo del paquete Playwright de Python que parchea las fugas de detección de Playwright mientras mantiene la API exacta de Playwright. Elige nodriver para una pila nativa de CDP nueva, Patchright para añadir sigilo al código existente de Playwright.

Q: ¿nodriver y Patchright ocultan navigator.webdriver?
Sí, ambos reportan navigator.webdriver como false por defecto, verificado en vivo en esta guía. nodriver elimina la señal de webdriver al no usar una capa de webdriver en absoluto; Patchright la parchea fuera de la superficie de Playwright.

Q: ¿Son estos navegadores anti-detección como Camoufox?
No. Camoufox es un navegador anti-detección a nivel de motor que reescribe las superficies de huellas digitales dentro de Firefox. nodriver y Patchright son a nivel de controlador: ejecutan Chromium ordinario y ocultan el canal de control de automatización. Los dos enfoques abordan diferentes capas de detección y pueden ser complementarios.

Q: ¿Qué licencia debería revisar antes de usarlos comercialmente?
nodriver es AGPL-3.0 (copyleft, con obligaciones de uso en red); Patchright es Apache-2.0 (permisiva). Si los términos de la licencia limitan tu producto, Patchright es la más permisiva de las dos, pero revisa ambas de acuerdo con tus propios requisitos.

Q: ¿Por qué añadir Scrapeless si mi sesión ya parece no automatizada?
Porque parecer no automatizado solo derrota cheques a nivel de controlador. Los objetivos difíciles también pesan la reputación de IP y sirven páginas de desafío, y ninguna biblioteca a nivel de controlador mueve tu IP o resuelve un desafío. Scrapeless Scraping Browser agrupa proxies residenciales en más de 195 países y manejo de desafíos en una sesión CDP gestionada, cubriendo la capa que estas herramientas no abordan.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar