Dev.to Security 🔐 Cybersecurity 👁 0 📖 2 min read

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 porqu

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

⚠️ 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
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

✅ 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")
  • 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.

📰 Read the original article on Dev.to Security

Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.