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 luegotime.sleep(0)— Cloudflare requiere tiempo para ejecutar su JS y establecer la cookiecf_clearance.
🧪 Opción 2: Simula el desafío manualmente (avanzado)
Si insistes en usar requests, debes:
- Hacer una petición inicial para obtener el HTML del desafío
- Extraer y ejecutar el script JS de validación (con
execjs) - Generar la cookie
cf_clearanceválida - 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
✅
cloudscrapermaneja internamente el desafío JS y cookies.
🛠️ Opción 3: Configura Cloudflare (si eres el dueño del sitio)
Si tú controlas el servidor:
- Accede al panel de Cloudflare → Security → WAF
- Busca la regla "JavaScript Challenge"
- Desactiva el desafío para tu IP o rango (solo para desarrollo)
- 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: usaWebDriverWaitcon 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:
cloudscrapery Selenium son las soluciones más robustas a largo plazo.
✅ Verificación final: Si la respuesta HTTP es
200 OKpero el contenido contiene<span id="challenge-error-text">, aún no has superado el desafío. Revisa cookies y headers.
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.