Volver al blog
Guías
Mihnea-Octavian ManolacheLast updated on Apr 30, 202621 min read

Evitar Cloudflare con Selenium: 5 métodos Python (2026)

Evitar Cloudflare con Selenium: 5 métodos Python (2026)
En resumen: Cloudflare bloquea Selenium estándar mediante el reconocimiento de huellas digitales del navegador, la inspección de encabezados y el análisis de señales de comportamiento. Esta guía repasa cinco métodos prácticos para eludir el bloqueo (ChromeDriver indetectable, Selenium Stealth, modo UC de SeleniumBase, integración de un solucionador de CAPTCHA y API de scraping), y se completa con código Python, una tabla comparativa y un manual de resolución de problemas para que puedas elegir el enfoque adecuado a tu escala y presupuesto.

Si has intentado extraer datos o automatizar un sitio protegido por Cloudflare con Selenium, probablemente te hayas topado con la pantalla intersticial «Comprobando tu navegador», un error 403 o un bucle infinito de retos. Cloudflare es una red de distribución de contenidos y una capa de seguridad que se sitúa entre el servidor de origen y cada visitante, filtrando activamente el tráfico automatizado. Para eludir Cloudflare con Selenium, es necesario comprender qué es lo que inspecciona Cloudflare y, a continuación, elegir una herramienta o técnica que aborde esos vectores de detección.

En esta guía desglosamos las principales formas en que Cloudflare detecta los bots y, a continuación, repasamos cinco estrategias distintas de elusión en Python, cada una con código funcional. También incluimos una tabla comparativa de métodos, consejos generales de refuerzo de seguridad (proxies, encabezados, perfiles de navegador) y una sección de resolución de problemas para los modos de fallo más comunes. Tanto si estás realizando unas pocas comprobaciones de control de calidad como si estás rastreando miles de páginas, aquí encontrarás un método que se adapta a tu situación y presupuesto.

Por qué Cloudflare bloquea Selenium (y qué comprueba)

Cloudflare actúa tanto como CDN como puerta de enlace de seguridad. Redirige el tráfico al servidor de origen, procesando cada solicitud a través de un canal de detección multicapa antes de que la página se cargue. Cuando tu script de Selenium activa ese canal, te aparece una página de desafío, un CAPTCHA o un bloqueo total. Entender qué inspecciona Cloudflare es el primer paso para elegir el método de elusión adecuado.

Inspección de encabezados y User-Agent

Todas las solicitudes HTTP llevan encabezados. Cloudflare los examina en busca de discrepancias: un Accept-Language, una cadena de agente de usuario obsoleta o genérica, o un orden de encabezados que no coincide con ninguna versión real del navegador. Selenium básico suele enviar los encabezados en un orden ligeramente diferente al de una sesión manual de Chrome, y esa sola discrepancia puede activar un desafío. La huella digital del navegador en esta capa examina no solo la cadena del agente de usuario, sino todo el conjunto de encabezados como una firma cohesionada.

Reputación de IP y análisis de frecuencia

Cloudflare mantiene una base de datos de reputación de direcciones IP. Los rangos de centros de datos conocidos, las direcciones asociadas a abusos previos y las IP que generan volúmenes de solicitudes anormales obtienen una puntuación baja. Si tu script de Selenium se ejecuta desde una máquina virtual en la nube sin una capa de proxy residencial, puede ser marcado antes incluso de que el navegador renderice la página. Por eso la rotación de proxies y la higiene de IP son fundamentales para cualquiera que intente eludir Cloudflare con Selenium a un volumen significativo.

Huellas digitales de TLS y HTTP/2

Cuando el navegador abre una conexión HTTPS, el protocolo de enlace TLS anuncia conjuntos de cifrado y extensiones en un orden específico. Cloudflare compara esa huella digital con una base de datos de versiones conocidas del navegador. Una versión estándar de ChromeDriver puede exponer una huella digital TLS que difiere de la que produce una instalación normal de Chrome. Se trata de una señal pasiva a nivel de red que ningún parche de JavaScript puede resolver por sí solo. Para mitigarla, es necesario utilizar un controlador que se ajuste lo más posible a la pila TLS de un navegador real, o descargar la capa de conexión a un servicio que se encargue de ello por ti.

Retos de JavaScript, huellas de Canvas y señales de comportamiento

Cloudflare inyecta JavaScript que sondea el entorno del navegador. La comprobación más conocida se centra en la navigator.webdriver propiedad, que Selenium establece en true por defecto. Pero los scripts van más allá: evalúan propiedades DOM específicas de la automatización (document.$cdc_), artefactos del protocolo de Chrome DevTools e inconsistencias en window.chrome. La huella digital de Canvas solicita al navegador que renderice una imagen oculta y calcula el hash de la salida de píxeles, que difiere entre sesiones sin interfaz gráfica y sesiones de usuarios reales. Además de todo esto, Cloudflare supervisa los movimientos del ratón, los eventos de desplazamiento y los patrones temporales para crear un perfil de comportamiento. Aproximadamente seis categorías de detección distintas funcionan de forma conjunta, aunque Cloudflare evoluciona continuamente estas comprobaciones, por lo que el recuento exacto puede variar con el tiempo.

Inicio rápido: comprobar tu estado de detección

Antes de intentar cualquier técnica de elusión, confirma que tu configuración de Selenium está siendo detectada. Existen varias páginas públicas de comprobación de bots para este fin. Dos opciones muy utilizadas son CreepJS y la prueba de detección de bots de Incolumitas. Abre estas páginas con tu script de Selenium y examina el resultado.

from selenium import webdriver

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver.get("https://abrahamjuliot.github.io/creepjs/")
# Inspect the trust score and fingerprint details in the rendered page
input("Check the results, then press Enter to close...")
driver.quit()

Si CreepJS informa de una puntuación de confianza baja o marca webdriver: true, tu configuración está filtrando señales de automatización. Anota tu puntuación de referencia y vuelve a ejecutar la misma prueba después de aplicar cada uno de los métodos que se indican a continuación. Esto te proporcionará una comparación cuantificable del antes y el después, para que no tengas que adivinar si un parche ha servido realmente de algo.

También debes verificar la reputación de tu IP de forma independiente comprobándola con un servicio como IPQualityScore. Si tu IP está marcada como una dirección de centro de datos, ni siquiera los mejores parches para el navegador lo compensarán por completo. Este flujo de trabajo de pruebas de detección es algo que debes repetir cada vez que cambies de proveedor de proxy, versión del controlador o configuración de ocultación. Tarda dos minutos y te ahorrará horas de depuración a ciegas más adelante.

Método 1: ChromeDriver no detectado

Undetected ChromeDriver es un sustituto directo del binario estándar chromedriver . Modifica el ejecutable de ChromeDriver en tiempo de ejecución para eliminar los marcadores de automatización conocidos (la $cdc_ variable, navigator.webdriver flag y los artefactos del protocolo DevTools), lo que lo convierte en una de las herramientas más populares para eludir Cloudflare con Selenium en Python.

Instalación y uso básico

pip install undetected-chromedriver
import undetected_chromedriver as uc

options = uc.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = uc.Chrome(options=options)

driver.get("https://target-cloudflare-site.com")
print(driver.title)
driver.quit()

La biblioteca descarga y parchea una versión compatible de ChromeDriver en la primera ejecución. No es necesario que gestiones tú mismo los binarios del controlador.

Incorporación de compatibilidad con proxies y rotación de User-Agent

Para evitar bloqueos basados en IP al intentar sortear Cloudflare, introduce un proxy residencial a través del indicador de inicio de Chrome o utiliza una extensión de autenticación:

options.add_argument("--proxy-server=http://user:pass@proxy-host:port")

Para la rotación del agente de usuario, elige de un conjunto de cadenas de agente de usuario actuales de Chrome y configúralas por sesión:

options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...")

Rote las cadenas de agente de usuario entre valores modernos y legítimos y asegúrese de que su Accept, Accept-Language, y Referer , sean coherentes con el agente de usuario elegido. Un agente de usuario de Chrome 120 combinado con encabezados al estilo de Firefox es una señal de alerta inmediata.

Limitaciones

Undetected ChromeDriver es mantenido por la comunidad y puede ir con días o semanas de retraso respecto a las actualizaciones de Cloudflare. En sitios muy protegidos o tras repetidas solicitudes desde la misma IP, pueden reaparecer los bucles de desafío. Tampoco resuelve los CAPTCHAs por sí solo, por lo que si el sitio de destino presenta un desafío Turnstile, necesitarás una herramienta complementaria. Piensa en ello como una primera capa sólida que cubre los vectores de detección a nivel de binario del navegador y de JS, pero no como una solución completa para todas las configuraciones de Cloudflare con las que te puedas encontrar. Para sitios con una gestión agresiva de bots, considera combinarlo con proxies residenciales y uno de los métodos adicionales que se indican a continuación.

Método 2: Selenium Stealth

Mientras que Undetected ChromeDriver parchea el binario, selenium-stealth funciona exclusivamente a nivel de JavaScript. Inyecta scripts en cada carga de página que anulan navigator.webdriver, falsifican el window.chrome objeto, corrigen las entradas que faltan navigator.plugins entradas que faltan y normalizan navigator.languages. El resultado es una sesión estándar de Selenium WebDriver que presenta una huella digital del navegador mucho más convincente para los scripts de detección de Cloudflare.

Configuración

pip install selenium-stealth
from selenium import webdriver
from selenium_stealth import stealth

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])

driver = webdriver.Chrome(options=options)

stealth(driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        webgl_vendor="Intel Inc.",
        renderer="Intel Iris OpenGL Engine",
        fix_hairline=True)

driver.get("target-cloudflare-site.com")
print(driver.page_source[:500])
driver.quit()

Qué corrige (y qué no)

Selenium-stealth gestiona la huella digital de la capa de JavaScript: navigator propiedades, matrices de complementos, cadenas WebGL y el chrome.runtime objeto. Sin embargo, no modifica la huella digital TLS, el binario de ChromeDriver ni los encabezados HTTP a nivel de red. Los sitios que emplean huellas digitales TLS profundas o detección a nivel binario pueden seguir marcando tus sesiones incluso con stealth aplicado.

Combinar selenium-stealth con una capa de proxy residencial y encabezados consistentes (Accept, Accept-Encoding, Accept-Language que coincidan con tu agente de usuario) amplía significativamente tu cobertura frente a la superficie de detección de Cloudflare. También puedes superponerlo a Undetected ChromeDriver para un enfoque de doble seguridad, modificando tanto el binario como la capa JS simultáneamente. Aun así, para sitios que realizan un análisis de huellas de forma agresiva más allá de JavaScript (especialmente a nivel de TLS y de red), selenium-stealth por sí solo puede no ser suficiente para eludir de forma fiable Cloudflare con Selenium en todas las sesiones. Es una herramienta ligera y fácil de añadir, pero solo aborda una parte de la pila de detección.

Método 3: Modo UC de SeleniumBase

SeleniumBase es un marco de automatización de pruebas en Python que incluye su propia integración con Undetected ChromeDriver, denominada modo UC. Según su documentación, el modo UC superpone parches de navegador adicionales sobre la biblioteca base de Undetected ChromeDriver, abordando más vectores de detección en una sola llamada a la API. Los mantenedores del proyecto describen estos parches como más activamente sincronizados con las versiones de Chrome que el paquete independiente undetected-chromedriver . Las comparativas independientes son escasas, por lo que hay que tomar las afirmaciones sobre eficiencia comparativa con la debida precaución.

Introducción

pip install seleniumbase
from seleniumbase import SB

with SB(uc=True) as sb:
    sb.open("target-cloudflare-site.com")
    sb.sleep(3)  # allow challenge to resolve
    print(sb.get_page_source()[:500])

El uc=True activan el modo Undetected ChromeDriver. SeleniumBase gestiona automáticamente las descargas del controlador, la aplicación de parches y la limpieza, lo que reduce el código repetitivo que, de otro modo, tendrías que gestionar manualmente.

Modo con ventana visible y requisitos de pantalla

Por defecto, el modo UC se ejecuta en modo con interfaz gráfica (ventana visible). Algunos flujos de desafío de Cloudflare, en particular los widgets Turnstile, dependen de la visualización de una casilla de verificación visible que el script de desafío supervisa. A partir de versiones recientes, SeleniumBase ofrece una uc_cdp variante sin interfaz gráfica, pero su fiabilidad frente a los retos de Cloudflare varía según el sitio. Si tu entorno admite una pantalla (o un framebuffer virtual como Xvfb en Linux), el modo con interfaz gráfica sigue siendo la opción más segura para obtener resultados consistentes al intentar eludir Cloudflare con Selenium a través de SeleniumBase.

Cuándo elegir SeleniumBase en lugar de ChromeDriver independiente no detectado

SeleniumBase es una buena opción cuando ya lo utilizas para la automatización de pruebas o cuando deseas una única dependencia que agrupe la gestión del controlador, los parches de ocultación y una API de alto nivel con esperas integradas, acciones de elementos y ayudantes de captura de pantalla. El marco también incluye integración con pytest, lo cual resulta útil si tus procesos de scraping ya coexisten con un conjunto de pruebas.

La contrapartida es una mayor huella de dependencias y un control menos granular sobre los parches individuales en comparación con la configuración undetected-chromedriver directamente. Si necesitas fijar una versión específica de ChromeDriver o personalizar exactamente qué parches se aplican, la biblioteca independiente te ofrece esa flexibilidad.

Método 4: Resolver Cloudflare Turnstile con un servicio CAPTCHA

Cuando Cloudflare pasa de un desafío de JavaScript a un CAPTCHA completo, los parches del navegador por sí solos no bastan. Cloudflare Turnstile es el producto CAPTCHA actual de Cloudflare. A diferencia de una simple casilla de verificación, Turnstile analiza múltiples señales de bot en segundo plano y requiere un token de solución válido antes de conceder acceso a la página protegida.

Flujo de trabajo general

  1. Extrae la clave del sitio. Inspecciona el código fuente de la página en busca del data-sitekey en el widget de Turnstile, o interceptarlo en una solicitud de red al punto final de desafío de Cloudflare.
  2. Envíalo a un servicio de resolución de CAPTCHA. Envía la clave del sitio, la URL de la página y el tipo de desafío a una API de resolución (como 2Captcha o CapSolver). El servicio utiliza trabajadores humanos o modelos de aprendizaje automático para generar un token válido.
  3. Injecte el token. Una vez que reciba el token, injéctelo en la llamada de retorno de la página o en un campo de formulario oculto:
token = "RECEIVED_TOKEN_FROM_SOLVER"
driver.execute_script(
    f'document.querySelector("[name=cf-turnstile-response]").value = "{token}";'
)
# Trigger the callback if one exists
driver.execute_script(
    "window.__cfTurnstileCallback && window.__cfTurnstileCallback(arguments[0]);",
    token
)

Consideraciones sobre costes, latencia y escalabilidad

Los servicios de resolución de CAPTCHA cobran por solución, normalmente entre 2 y 5 dólares por cada mil resoluciones. Las soluciones de Turnstile también introducen una latencia de entre 5 y 30 segundos por desafío, dependiendo de la carga del servicio y la profundidad de la cola. A gran escala, estos costes se acumulan rápidamente. Este método funciona mejor como alternativa específica para páginas en las que otros enfoques fallan, no como estrategia principal de elusión para cada solicitud.

Advertencia sobre el modo sin interfaz gráfica

Muchos servicios CAPTCHA requieren una ventana de navegador visible para renderizar el widget de desafío antes de la extracción del token. Si está ejecutando en modo sin interfaz gráfica, es posible que tenga que cambiar al modo con interfaz gráfica (o utilizar Xvfb) para el paso de resolución del CAPTCHA. Este es uno de los casos en los que la elección entre el modo con interfaz gráfica y el modo sin interfaz gráfica determina directamente si puedes eludir con éxito Cloudflare con Selenium en páginas protegidas por CAPTCHA.

Método 5: Eludir Cloudflare con Selenium Alternativas: API de web scraping

Si prefieres no tener que gestionar tú mismo los parches del navegador, los grupos de proxies y las integraciones de CAPTCHA, la quinta opción es delegar toda la capa anti-bot a una API dedicada al web scraping. Estos servicios se encargan de la rotación de proxies, la resolución de CAPTCHA, la gestión de huellas digitales del navegador y la lógica de reintentos detrás de un único punto final HTTP. Tú envías una URL y el servicio devuelve el HTML renderizado.

Patrón de integración

La integración típica sustituye (o complementa) tu capa de solicitudes de Selenium. En lugar de navegar con Selenium directamente a la URL de destino, llamas a la API e introduces el HTML devuelto en tu canal de análisis:

import requests

api_url = "api.example.com/scrape"
params = {
    "url": "target-cloudflare-site.com",
    "render_js": "true"
}
headers = {"Authorization": "Bearer YOUR_API_KEY"}

response = requests.get(api_url, params=params, headers=headers)
html = response.text
# Parse with BeautifulSoup, lxml, or pass to your existing pipeline

También puede enrutar un servicio de proxy basado en API a través del propio Selenium cuando necesite interacción con el navegador (clics, rellenado de formularios, desplazamiento) tras superar el desafío inicial de Cloudflare.

Ventajas e inconvenientes: fiabilidad frente a coste

Este es el enfoque más fiable a gran escala. No tienes que estar al tanto de las actualizaciones de detección de Cloudflare, no tienes que depurar discrepancias en las huellas TLS y no tienes que gestionar integraciones de solucionadores de CAPTCHA. El proveedor se encarga de todo eso de forma centralizada y se adapta más rápido de lo que suelen hacerlo los proyectos de código abierto.

Las desventajas son el coste por solicitud y la dependencia del proveedor. Se paga por cada respuesta satisfactoria y se está limitado a las funciones que ofrece el servicio. Para el scraping de producción de gran volumen, donde el tiempo de actividad y la calidad de los datos importan más que el coste por solicitud, este enfoque suele ser la opción más pragmática. También cabe destacar que algunos servicios solo cobran por la extracción de datos satisfactoria, por lo que las solicitudes fallidas no merman el presupuesto.

Para equipos con recursos de ingeniería limitados o requisitos estrictos de tiempo de actividad, un enfoque basado en API elimina toda una categoría de tareas de mantenimiento: supervisar la compatibilidad de ChromeDriver, actualizar parches de seguridad tras cambios de Cloudflare y depurar fallos intermitentes en diferentes sitios de destino.

Comparación de métodos de elusión: fiabilidad, escalabilidad y coste

La elección del enfoque adecuado depende de su volumen, presupuesto y tolerancia al mantenimiento continuo. La tabla siguiente evalúa cada método en cuatro dimensiones para ayudarle a decidir cómo eludir Cloudflare con Selenium para su caso de uso específico.

Método

Dificultad de configuración

Fiabilidad

Escalabilidad

Coste

ChromeDriver no detectado

Baja (pip install)

Media: funciona en la mayoría de los sitios, puede fallar en configuraciones agresivas

Medio: un navegador por sesión

Gratuito (código abierto)

Selenium Stealth

Bajo (pip install)

Bajo a medio: los parches solo para JS no detectan los controles de la capa TLS

Medio: misma restricción de un navegador por sesión

Gratuito (código abierto)

Modo UC de SeleniumBase

Bajo (pip install)

De medio a alto: parches más amplios, mantenimiento activo

Medio: vinculado al navegador

Gratuito (código abierto)

Servicio de resolución de CAPTCHA

Medio (claves API + código de inyección de tokens)

Alto, específicamente para páginas protegidas con CAPTCHA

Bajo a medio: el coste y la latencia varían de forma lineal

~2-5 $ por cada 1000 resoluciones

API de web scraping

Bajo (una sola llamada HTTP)

Alto: el proveedor se encarga de la carrera armamentística de la detección

Alto: diseñada para el volumen

Pago por solicitud exitosa

Las herramientas de código abierto cubren eficazmente el volumen bajo a medio. Una vez que se realizan miles de solicitudes diarias o se apunta a sitios muy protegidos, la carga de mantenimiento de las soluciones «hazlo tú mismo» aumenta y los servicios gestionados empiezan a amortizarse gracias al tiempo de ingeniería ahorrado. Muchos equipos utilizan un enfoque híbrido: métodos de código abierto para la mayoría de los objetivos, con una API de respaldo para los dominios más agresivamente protegidos.

Reforzar cualquier método: proxies, encabezados y perfiles de navegador

Independientemente del método de elusión que elijas, hay algunas técnicas transversales que reducen significativamente tu superficie de detección.

Proxies residenciales y móviles. El sistema de reputación de IP de Cloudflare trata las IP de los centros de datos con recelo. Enrutar el tráfico a través de direcciones IP residenciales o móviles hace que las solicitudes parezcan tráfico normal de consumidores. Rota las IP entre sesiones, pero mantén la afinidad de sesión dentro de una misma carga de página para que las cookies y los tokens de autorización de Cloudflare se mantengan consistentes.

Consistencia de los encabezados. Tu Accept, Accept-Language, Accept-Encodingy Referer deben coincidir con el agente de usuario que hayas establecido. Un agente de usuario de Chrome 120 combinado con encabezados «accept» al estilo de Firefox es una señal de alerta evidente. Crea un objeto de perfil de encabezados y aplícalo de manera uniforme en todas las solicitudes de una sesión.

Perfiles de navegador persistentes y reutilización de cookies. En lugar de iniciar un perfil de Chrome nuevo en cada ejecución, crea y reutiliza un directorio de perfiles persistente. Esto conserva las cookies (incluida la cf_clearance ), las fuentes almacenadas en caché y el almacenamiento local. Tras superar una vez el desafío de Cloudflare, las visitas posteriores desde el mismo perfil suelen pasar sin que se vuelva a plantear el desafío, al menos hasta que caduque la cookie de autorización.

options.add_argument("--user-data-dir=/path/to/persistent-profile")

Supervisión del estado del proxy. Realice un seguimiento de los códigos de respuesta y la latencia por dirección de proxy. Retire las IP que empiecen a devolver errores 403 o que presenten tasas de desafío elevadas. Distribuir las solicitudes de manera uniforme evita que una sola dirección se sature.

Modo sin interfaz gráfica frente a modo con interfaz gráfica: cuándo funciona cada uno

El modo sin interfaz es conveniente para los flujos de trabajo de CI y los entornos de servidor, pero introduce un riesgo de detección adicional. Históricamente, Chrome sin interfaz ha filtrado señales como la falta de window.outerHeight, una ventana de visualización de tamaño cero o la HeadlessChrome subcadena en el agente de usuario. Los parches modernos solucionan la mayoría de estos indicios, pero algunas configuraciones de Cloudflare y la mayoría de los flujos de CAPTCHA siguen requiriendo una ventana visible.

Si debe ejecutar en modo sin interfaz gráfica, aplique parches de ocultación, establezca dimensiones realistas para la ventana de visualización y elimine cualquier indicador de modo sin interfaz gráfica del agente de usuario. Para flujos de trabajo con gran cantidad de CAPTCHA, utilice Xvfb (X Virtual Framebuffer) en Linux para simular una pantalla sin un monitor físico. Esto le proporciona un comportamiento de modo con interfaz gráfica en un entorno de servidor sin necesidad de un escritorio.

Solución de problemas de fallos comunes

Incluso con las herramientas adecuadas, las cosas fallan. Aquí tienes una lista de verificación de diagnóstico para los fallos más comunes al eludir Cloudflare.

Bucles de desafío infinitos. La página sigue recargando la pantalla «Comprobando tu navegador». Esto suele significar que tu cookie de autorización no se está almacenando, o que tu IP cambió a mitad de la sesión. Asegúrate de utilizar esperas explícitas (no llamadas fijas time.sleep ) y de que tu proxy mantenga la afinidad de sesión durante todo el flujo del desafío.

403 tras el paso inicial. Has superado el desafío en la primera página, pero las páginas más profundas devuelven un 403. Cloudflare a veces vuelve a validar durante la navegación. Mantén la cf_clearance cookie en todas las solicitudes de la misma sesión y evita cambiar de IP entre cargas de página.

CAPTCHAs repetidos en cada página. Si cada página presenta un widget Turnstile, es probable que la huella digital de tu navegador haya sido marcada a un nivel más profundo. Vuelve a probar en una página de detección de bots para identificar qué señal está filtrándose. Las causas más comunes incluyen una matriz de complementos que falta, un renderizador WebGL que no coincide o una IP de centro de datos que Cloudflare ya ha incluido en la lista negra.

Errores de tiempo de espera. La página de desafío se carga pero nunca se resuelve. Aumenta tu tiempo de espera explícito y verifica que el JavaScript de desafío de Cloudflare se esté ejecutando correctamente. Algunas opciones de Chrome (--disable-gpu, anulaciones agresivas de la política de seguridad de contenido) pueden impedir que los scripts de desafío se completen.

Configuración incorrecta del proxy. Prueba siempre tu proxy con una llamada requests.get("httpbin.org/ip") antes de integrarlo en Selenium. Confirma que la IP de salida coincide con lo esperado, que la autenticación funciona y que el proxy admite el túnel HTTPS CONNECT.

Límites éticos y legales

Eludir las protecciones de Cloudflare plantea cuestiones legales y éticas reales que merecen una consideración honesta. Antes de implementar cualquier método de esta guía, comprueba los robots.txt y las condiciones de servicio del sitio de destino. Muchos sitios prohíben explícitamente el acceso automatizado.

Limita la frecuencia de tus solicitudes. Bombardear un sitio con sesiones paralelas de Selenium no solo conlleva el riesgo de bloqueo, sino que degrada el rendimiento para los usuarios reales. Trata estas técnicas de elusión como herramientas para pruebas autorizadas, investigación y recopilación de datos que respeten la infraestructura del sitio. Cuando haya datos estructurados disponibles a través de una API oficial, opta por esa vía. Es más rápida, más fiable y elimina por completo cualquier ambigüedad legal.

Puntos clave

  • Cloudflare utiliza detección por capas (reputación de IP, huellas TLS, retos JS, análisis de comportamiento), por lo que un único parche rara vez cubre todos los vectores. Estructura tus defensas en consecuencia.
  • ChromeDriver sin detectar y el modo UC de SeleniumBase son las opciones gratuitas más sólidas para trabajos de volumen bajo a medio. Selenium Stealth solo cubre la capa de JavaScript y puede que no sea suficiente por sí solo.
  • Los servicios de resolución de CAPTCHA gestionan los retos de Turnstile, pero añaden costes y latencia, por lo que son más adecuados como recurso específico que como estrategia general.
  • Prueba siempre tu configuración en una página pública de detección de bots (como CreepJS) antes de implementarla en objetivos reales. Esto te ahorrará horas de depuración a ciegas.
  • A escala de producción, los servicios basados en API sacrifican el coste por solicitud a cambio de fiabilidad técnica, eliminando la necesidad de perseguir las actualizaciones de detección de Cloudflare, en constante evolución.

Preguntas frecuentes

¿Puede Selenium básico eludir Cloudflare sin bibliotecas adicionales?

No. Selenium tal cual expone el navigator.webdriver , filtra variables DOM específicas de ChromeDriver y envía encabezados predeterminados que el canal de detección de Cloudflare detecta de inmediato. Necesitas como mínimo un parche de ocultación o una variante de controlador no detectada para superar incluso los retos básicos de JavaScript.

¿Cuál es la diferencia entre Selenium Stealth y el modo UC de SeleniumBase?

Selenium Stealth inyecta modificaciones de JavaScript en cada página para enmascarar propiedades como navigator.webdriver y window.chrome. El modo UC de SeleniumBase va más allá: parchea el propio binario de ChromeDriver, gestiona automáticamente las versiones del controlador y aplica correcciones adicionales contra la identificación a nivel del navegador, en lugar de solo en la capa de JavaScript.

¿Puede Selenium ejecutarse en modo sin interfaz gráfica y seguir eludiendo Cloudflare?

A veces. Los parches de ocultación modernos mitigan muchas huellas de modo sin interfaz gráfica, pero algunas configuraciones de Cloudflare y flujos de CAPTCHA siguen requiriendo una ventana de navegador visible. En servidores sin interfaz gráfica, utiliza un framebuffer virtual (Xvfb) para simular una pantalla, lo que te proporciona un comportamiento de modo con interfaz gráfica sin necesidad de un monitor físico.

¿Con qué frecuencia actualiza Cloudflare su detección de bots y cómo afecta eso a estos métodos?

Cloudflare lanza actualizaciones de detección continuamente, con cambios notables aproximadamente cada pocas semanas. Las herramientas de código abierto como Undetected ChromeDriver suelen tener un retraso de días o semanas tras una actualización importante, lo que provoca interrupciones temporales. Los servicios de scraping gestionados se adaptan más rápido porque sus equipos actualizan la infraestructura de forma centralizada y pueden responder en cuestión de horas.

Conclusión

Superar la detección de bots de Cloudflare con Selenium es un problema complejo que requiere una solución por capas. Empieza por comprender qué es lo que Cloudflare comprueba realmente (huellas TLS, sondas JavaScript, reputación de IP, patrones de comportamiento) y, a continuación, elige el método de elusión que se adapte a tu escala y a tus necesidades de mantenimiento.

Para trabajos rápidos y de bajo volumen, Undetected ChromeDriver o el modo UC de SeleniumBase te permitirán superar la mayoría de los retos con una configuración mínima. Cuando aparecen los CAPTCHAs de Turnstile, un servicio de resolución cubre esa necesidad. Y para cargas de trabajo de producción en las que la fiabilidad y el tiempo de actividad importan más que el coste por solicitud, descargar toda la capa anti-bot a un servicio gestionado es la decisión más pragmática.

Sea cual sea el método que elijas, combínalo con proxies residenciales, encabezados consistentes y un perfil de navegador persistente. Prueba tu configuración en una página de detección de bots antes de implementarla, y vuelve a probarla cada vez que tu tasa de éxito disminuya.

Si prefieres evitar por completo este juego del gato y el ratón, WebScrapingAPI se encarga de la rotación de proxies, la resolución de CAPTCHAs y la gestión de huellas digitales desde un único punto de acceso, para que puedas centrarte en lo que realmente te importa: los datos.

Acerca del autor
Mihnea-Octavian Manolache, Desarrollador Full Stack @ WebScrapingAPI
Mihnea-Octavian ManolacheDesarrollador Full Stack

Mihnea-Octavian Manolache es ingeniero Full Stack y DevOps en WebScrapingAPI, donde se encarga de desarrollar funciones para los productos y de mantener la infraestructura que garantiza el buen funcionamiento de la plataforma.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.