DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar el error \"Enable JavaScript and cookies to continue\"

Cómo solucionar el error "Enable JavaScript and cookies to continue"

Este mensaje no es un error de tu código, sino una protección activa de Cloudflare (o similar, como Incapsula/Imperva) que bloquea la solicitud porque detecta que el cliente no cumple con los requisitos mínimos de seguridad: JavaScript habilitado y cookies aceptadas.

🔍 Causa técnica

Cloudflare implementa un desafío de "JavaScript Challenge" para distinguir entre navegadores reales y bots/scraper automatizados. Cuando una solicitud HTTP no incluye:

  • Ejecución de JavaScript (para validar el desafío)
  • Almacenamiento y reenvío de cookies (cf_clearance)

...el servidor responde con esta página intermedia en lugar de servir el contenido real.

Esto ocurre comúnmente en:

  • Requests automatizados (Python requests, curl, etc.)
  • Configuraciones de proxies sin soporte JS
  • Navegadores headless mal configurados
  • Pruebas con herramientas como Selenium sin manejo de cookies

✅ Solución definitiva (3 enfoques)

🔧 Opción 1: Usa un navegador real (recomendado para scraping)

Con Selenium (Python):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

driver = webdriver.Chrome(options=options)
driver.get("https://tu-sitio.com")

# Espera a que Cloudflare resuelva el desafío (hasta 10s)
import time
time.sleep(10)

# Ahora sí tienes acceso al contenido real
html = driver.page_source
Enter fullscreen mode Exit fullscreen mode

⚠️ Clave: No uses driver.get() y luego time.sleep(0) — Cloudflare requiere tiempo para ejecutar su JS y establecer la cookie cf_clearance.


🧪 Opción 2: Simula el desafío manualmente (avanzado)

Si insistes en usar requests, debes:

  1. Hacer una petición inicial para obtener el HTML del desafío
  2. Extraer y ejecutar el script JS de validación (con execjs)
  3. Generar la cookie cf_clearance válida
  4. Reintentar la petición con cookies y headers correctos

Ejemplo simplificado con cloudscraper (Python):

pip install cloudscraper
Enter fullscreen mode Exit fullscreen mode
import cloudscraper

scraper = cloudscraper.create_scraper(
    browser={
        'browser': 'firefox',
        'platform': 'windows',
        'mobile': False
    }
)
response = scraper.get("https://tu-sitio.com")
print(response.text)  # Ahora sí obtienes el contenido real
Enter fullscreen mode Exit fullscreen mode

cloudscraper maneja internamente el desafío JS y cookies.


🛠️ Opción 3: Configura Cloudflare (si eres el dueño del sitio)

Si tú controlas el servidor:

  1. Accede al panel de Cloudflare → Security → WAF
  2. Busca la regla "JavaScript Challenge"
  3. Desactiva el desafío para tu IP o rango (solo para desarrollo)
  4. O usa "Under Attack Mode" solo temporalmente

🚫 No recomendado en producción: debilita la protección DDoS.


💡 Pro-tip

  • Nunca confíes en time.sleep() fijo para esperar desafíos: usa WebDriverWait con condiciones explícitas.
  • Si usas headless, añade:
  options.add_argument("--disable-dev-shm-usage")
  options.add_argument("--no-sandbox")
  options.add_argument("--disable-gpu")
Enter fullscreen mode Exit fullscreen mode
  • Cloudflare cambia sus desafíos frecuentemente: cloudscraper y Selenium son las soluciones más robustas a largo plazo.

Verificación final: Si la respuesta HTTP es 200 OK pero el contenido contiene <span id="challenge-error-text">, aún no has superado el desafío. Revisa cookies y headers.

Top comments (0)