Volver al blog

Evita la detección de bots con Playwright Stealth: 9 soluciones para 2026.

Michael Lee
Michael Lee

Expert Network Defense Engineer

30-Jun-2026

TL;DR:

  • Playwright filtra huellas dactilares. Las instancias predeterminadas de Chromium sin cabeza transmiten señales de automatización como navigator.webdriver, falta de complementos y tamaños de ventana predecibles.
  • Los ecosistemas de Python y Node.js son diferentes. Utiliza playwright-stealth en Python (con el administrador de contexto v2.x) y playwright-extra en Node.js para parchear estas filtraciones.
  • El sigilo requiere múltiples capas. Eludir la detección moderna requiere parchear la capa de JavaScript, aleatorizar cabeceras, rotar proxies y administrar cookies de sesión simultáneamente.
  • Los navegadores en la nube manejan el resto. Cuando los complementos de sigilo locales fallan contra WAF avanzados, descargar la ejecución del navegador a una infraestructura gestionada es la única ruta de actualización confiable.
  • Gratis para comenzar. Las nuevas cuentas de Scrapeless incluyen tiempo de ejecución gratuito del Navegador de Scraping — regístrate en app.scrapeless.com.

Introducción: los límites de la automatización predeterminada

Playwright es una poderosa herramienta de automatización de navegadores, pero tal como viene, se anuncia a sí misma como un bot. Cuando lanzas una instancia de Chromium sin cabeza, lleva marcadores específicos, como la bandera navigator.webdriver configurada en true, la falta de complementos de navegador estándar y firmas WebGL distintas. Los sistemas modernos anti-bot de Cloudflare, DataDome y Akamai leen estas señales y bloquean la solicitud antes de que tu script pueda siquiera analizar el DOM.

Para raspar sitios protegidos, necesitas el sigilo de Playwright. Sin embargo, "modo sigiloso" no es un interruptor incorporado que puedas activar en la biblioteca de Playwright. Requiere implementar técnicas específicas para parchear filtraciones de huellas dactilares del navegador, gestionar características de red y emular el comportamiento humano.

Esta guía desglosa 9 soluciones prácticas para evitar la detección de bots con Playwright en 2025, proporcionando ejemplos de código detallados para ayudarte a navegar las complejidades de la recopilación moderna de datos web.


Lo Que Puedes Hacer Con Esto

  • Eludir la detección básica de bots. Accede a sitios web que bloquean navegadores sin cabeza predeterminados parcheando filtraciones de navigator.webdriver y User-Agent.
  • Estandarizar huellas dactilares del navegador. Inyecta datos realistas de concurrencia de hardware, memoria y complementos en tu instancia de Chromium sin cabeza.
  • Mantener la persistencia de la sesión. Combina parches de sigilo con una gestión adecuada de cookies y contextos para mantener las sesiones activas durante más tiempo.
  • Escalar la extracción de datos. Ejecuta contextos de navegador paralelos y parcheados para tareas de raspado de alto volumen.

Por Qué Scrapeless Scraping Browser

Scrapeless Scraping Browser es un navegador en la nube personalizable y anti-detección diseñado para rastreadores web y agentes de IA. Cuando los complementos de sigilo locales alcanzan sus límites contra WAF avanzados, trae:

  • Anti-detección incorporado. Suplantación nativa de huellas dactilares que va más allá de los parches de JavaScript, incluyendo gestión de huellas dactilares de TLS y TCP.
  • Rotación automática de proxies. Proxies residenciales integrados en más de 195 países para resolver el problema de reputación de IP.
  • Resolución de desafíos gestionada. Resolución automática de Cloudflare Turnstile, reCAPTCHA y hCaptcha.
  • Compatibilidad con Playwright. Conecta tus scripts de Playwright existentes al navegador de nube a través de CDP con una sola línea de código.

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


Requisitos Previos

  • Node.js 18+ o Python 3.10+
  • Una cuenta de Scrapeless y clave API — regístrate en app.scrapeless.com
  • Familiaridad básica con la automatización de Playwright

9 Soluciones para Evitar la Detección de Bots con Playwright Stealth

Uno de los indicadores más comunes de automatización es la propiedad navigator.webdriver, que se establece en true en entornos de navegador automatizados. El estándar W3C WebDriver define esta bandera específicamente para permitir que los servidores identifiquen el tráfico automatizado. Los sitios web pueden verificar fácilmente esta bandera para identificar bots. Desactivarla es una técnica fundamental de sigilo.

Pasos de operación del código:

Usa page.add_init_script() para inyectar JavaScript que modifica la propiedad navigator.webdriver antes de que se ejecuten los scripts del sitio:

python Copy
from playwright.sync_api import sync_playwright

con sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context()
    
    # Inyectar JavaScript para desactivar la bandera del webdriver
    context.add_init_script("""
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
    """)
    
    page = context.new_page()
    page.goto("https://bot.sannysoft.com/")
    page.screenshot(path="webdriver_disabled.png")
    browser.close()

2. Aleatorizar Cadenas de User-Agent

El encabezado User-Agent identifica el navegador y el sistema operativo ante el servidor web. Usar un User-Agent consistente o desactualizado (especialmente uno que contenga HeadlessChrome) es un fuerte indicador de un bot. Aleatorizar las cadenas User-Agent ayuda a aparecer como diferentes usuarios legítimos.

Pasos de Operación del Código:

Mantener una lista de cadenas User-Agent comunes y seleccionar una aleatoriamente para cada sesión:

python Copy
from playwright.sync_api import sync_playwright
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0"
]

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context(user_agent=random.choice(user_agents))
    page = context.new_page()
    page.goto("https://www.whatismybrowser.com/detect/what-is-my-user-agent")
    page.screenshot(path="random_user_agent.png")
    browser.close()

3. Usar Proxies y Rotar Direcciones IP

Las solicitudes repetidas desde la misma dirección IP son un indicador principal de actividad de bots. Usar un conjunto de proxies y rotar direcciones IP para cada solicitud o sesión distribuye su tráfico y evita bloqueos basados en IP.

Pasos de Operación del Código:

Configurar Playwright para usar un proxy:

python Copy
from playwright.sync_api import sync_playwright
import random

proxies = [
    "http://user1:pass1@proxy1.example.com:8080",
    "http://user2:pass2@proxy2.example.com:8080"
]

with sync_playwright() as p:
    # Lanzar el navegador con un proxy seleccionado aleatoriamente
    browser = p.chromium.launch(headless=True, proxy={
        "server": random.choice(proxies)
    })
    page = browser.new_page()
    page.goto("https://www.whatismyip.com/")
    browser.close()

Para operaciones a gran escala, considere usar un servicio de proxy gestionado como Scrapeless Proxies que maneja la rotación automáticamente.

4. Simular Movimientos de Ratón y Entradas de Teclado Realistas

Los bots a menudo interactúan con los elementos web directamente e instantáneamente, lo cual no es natural. Los sistemas anti-bots rastrean biométricas de comportamiento como la velocidad del cursor y la cadencia de pulsaciones. Simular movimientos de ratón, clics y entradas de teclado similares a los humanos reduce las posibilidades de detección.

Pasos de Operación del Código:

Usar los métodos page.mouse y page.keyboard para introducir retrasos y rutas realistas:

python Copy
from playwright.sync_api import sync_playwright
import time
import random

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

    # Simular escritura similar a la humana
    search_input = page.locator("#search-box")
    search_input.click()
    text_to_type = "Playwright Stealth"
    for char in text_to_type:
        page.keyboard.type(char)
        time.sleep(random.uniform(0.05, 0.2)) # Retraso aleatorio entre pulsaciones
    page.keyboard.press("Enter")
    
    browser.close()

5. Gestionar Cookies y Datos de Sesión

Los sitios web utilizan cookies para rastrear sesiones de usuarios. Los bots que abandonan cookies entre solicitudes son fácilmente identificados como tráfico automatizado. Mantener una sesión consistente aceptando y enviando cookies es vital para el sigilo.

Pasos de Operación del Código:

Usar context.storage_state() para guardar cookies y almacenamiento local, luego cargarlas en nuevas sesiones:

python Copy
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    
    # Escenario 1: Guardar las cookies de la sesión actual para su uso futuro
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.example.com/login")
    # Realizar login...
    
    # Guardar estado
    context.storage_state(path="state.json")
    browser.close()

    # Escenario 2: Cargar cookies de una sesión anterior
    browser2 = p.chromium.launch(headless=True)
    context2 = browser2.new_context(storage_state="state.json")
    page2 = context2.new_page()
    page2.goto("https://www.example.com/dashboard")
    browser2.close()

6. Ajustar el Tamaño de la Ventana y la Emulación de Dispositivos

Los sitios web verifican el tamaño de la ventana y la resolución de pantalla para detectar anomalías. Usar un tamaño de ventana predeterminado de 800x600 es una bandera roja común. Emular configuraciones de dispositivos comunes ayuda a mezclarse con el tráfico real de usuarios.

Pasos de Operación del Código:

Configurar viewport y user_agent al crear un nuevo contexto:

python Copy
from playwright.sync_api import sync_playwright
import random

viewports = [
    {"width": 1920, "height": 1080}, # Escritorio

{"ancho": 1366, "alto": 768}, # Laptop
]

con sync_playwright() como p:
navegador = p.chromium.launch(headless=True)

Copy
viewport_seleccionado = random.choice(viewports)
contexto = navegador.new_context(
    viewport=viewport_seleccionado
)
pagina = contexto.new_page()
pagina.goto("https://www.deviceinfo.me/")
navegador.close()
Copy
### 7. Evitar la detección del modo sin cabeza

Si bien el modo sin cabeza es eficiente, algunos sistemas anti-bots pueden detectarlo al verificar la falta de capacidades de representación gráfica. Ejecutar Playwright en modo con cabeza (con una interfaz de navegador visible) puede a veces eludir la detección, especialmente para sistemas más agresivos.

**Pasos de operación del código:**

Establecer `headless=False` al lanzar el navegador:

```python
from playwright.sync_api import sync_playwright

con sync_playwright() como p:
    navegador = p.chromium.launch(headless=False) # Lanzar en modo con cabeza
    pagina = navegador.new_page()
    pagina.goto("https://www.ejemplo.com")
    navegador.close()

8. Utilizar playwright-stealth y playwright-extra

En lugar de escribir inyecciones de JavaScript manuales, utiliza paquetes de sigilo dedicados. El ecosistema de Python utiliza playwright-stealth, mientras que Node.js usa playwright-extra combinado con puppeteer-extra-plugin-stealth. Estas bibliotecas aplican automáticamente una serie de evasiones para parchear la huella digital del navegador.

Pasos de operación del código (Python):

Instalar el paquete (pip install playwright-stealth) y usar la API de gestor de contexto v2.x:

python Copy
import asyncio
from playwright_stealth import Stealth
from playwright.async_api import async_playwright

async def main():
    # El gestor de contexto aplica parches de sigilo automáticamente
    async with Stealth().use_async(async_playwright()) como playwright:
        navegador = await playwright.chromium.launch(headless=True)
        contexto = await navegador.new_context()
        pagina = await contexto.new_page()
        
        await pagina.goto("https://bot.sannysoft.com/")
        await navegador.close()

asyncio.run(main())

9. Implementar retrasos y aleatorización en las acciones

Los bots a menudo ejecutan acciones con un tiempo y velocidad perfectos. Introducir retrasos aleatorios entre acciones y variar la velocidad de las interacciones hace que el script parezca más humano.

Pasos de operación del código:

Utilizar time.sleep() con intervalos aleatorios:

python Copy
from playwright.sync_api import sync_playwright
import time
import random

con sync_playwright() como p:
    navegador = p.chromium.launch(headless=True)
    pagina = navegador.new_page()
    pagina.goto("https://www.ejemplo.com")

    # Simular navegación con retrasos aleatorios
    time.sleep(random.uniform(2, 5)) # Retraso inicial de carga de página
    pagina.click("a[href='/productos']")
    
    pagina.locator("input[name='q']").fill("artículo de búsqueda")
    time.sleep(random.uniform(0.5, 1.5)) # Retraso después de escribir
    pagina.keyboard.press("Enter")
    
    navegador.close()

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


Conclusión: más allá del sigilo básico

Los complementos de sigilo de Playwright y los ajustes de comportamiento son esenciales para el raspado web básico, pero tienen límites. Operan a nivel de JavaScript, lo que significa que no pueden suplantar las huellas digitales TLS, los tamaños de ventana TCP o resolver desafíos de comportamiento complejos como Cloudflare Turnstile.

Cuando tu navegador local con parches de sigilo comienza a recibir errores 403 o bucles de CAPTCHA, la solución no es escribir más evasiones de JavaScript. La solución es delegar la ejecución del navegador a una infraestructura gestionada como el Navegador de Raspado de Scrapeless, que maneja la rotación de IP, la huella digital TLS y la resolución de desafíos automáticamente mientras te permite mantener tu código de Playwright.


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

Únete a la comunidad de desarrolladores que están construyendo sistemas robustos de extracción de datos.


Preguntas Frecuentes

P: ¿Está el sigilo de Playwright integrado en la biblioteca?
No. Playwright no tiene un modo de sigilo nativo. Debes usar paquetes de terceros: playwright-stealth para Python, o playwright-extra con el complemento de sigilo para Node.js.

P: ¿Los complementos de sigilo evitan Cloudflare?
Los complementos de sigilo parchean filtraciones básicas de huella digital del navegador, lo que ayuda contra controles simples. Sin embargo, no resuelven desafíos avanzados de Cloudflare (como Turnstile) ni corrigen problemas de reputación de IP.

P: ¿Funciona el sigilo de Playwright con Firefox o WebKit?
No. Los módulos de evasión en ambos paquetes de sigilo de Python y Node.js están diseñados específicamente para parchear las API de Chromium. No son compatibles con Firefox ni con WebKit.

P: ¿Aún necesito proxies si uso sigilo?
Sí. Los complementos de sigilo solo enmascaran la identidad del navegador (la huella digital). No ocultan tu dirección IP. Aún necesitas proxies residenciales para evitar límites de tasa y bloqueos basados en IP.

P: ¿Es legal hacer scraping con Playwright?
Hacer scraping de datos públicamente visibles es generalmente permitido, aunque las jurisdicciones varían. Revisa los Términos de Servicio del sitio objetivo y consulta con un abogado sobre tu caso de uso específico.

P: ¿Puede esto funcionar sin un agente de IA?
Sí, el código de Playwright funciona de extremo a extremo como scripts de automatización estándar. No se necesita un agente de IA para implementar el sigilo del navegador.

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