Cómo solucionar el error "Enable JavaScript and cookies to continue"
¿Por qué ocurre este error?
Este mensaje aparece cuando Cloudflare (o un proxy similar como Brotli/WAF) bloquea la solicitud porque detecta que el navegador no cumple con los requisitos mínimos de seguridad. Especialmente común en:
- Solicitudes automatizadas (scraping, scripts, bots) sin headers o cookies válidas.
- Navegadores con JavaScript deshabilitado (poco común en entornos reales, más frecuente en entornos headless mal configurados).
- Sesiones sin cookies habilitadas o con políticas estrictas de privacidad (ej. modo incógnito con bloqueo agresivo).
- Uso de librerías HTTP sin emular correctamente un cliente real (ej.
requestsen Python sinUser-Agent,Accept-Language, etc.).
⚠️ No es un error de tu código front-end, sino una defensa activa del servidor contra tráfico no humano.
Solución definitiva (según tu entorno)
✅ Si usas un navegador headless (Puppeteer, Playwright, Selenium)
1. Habilita explícitamente JavaScript y cookies
// Ejemplo con Puppeteer (Node.js)
const browser = await puppeteer.launch({
headless: 'new',
args: ['--disable-features=IsolateOrigins,site-per-process']
});
const page = await browser.newPage();
await page.setJavaScriptEnabled(true);
await page.setCookie({
name: 'cf_clearance',
value: 'dummy-value', // O mejor: resuelve el challenge manualmente una vez y reutiliza el token
domain: '.tu-dominio.com'
});
// Simula un navegador real
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
await page.setViewport({ width: 1920, height: 1080 });
2. Usa un resolver de challenges (recomendado)
npm install puppeteer-extra-plugin-stealth
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
// ... luego lanza el navegador como antes
💡 Pro-tip: Cloudflare usa browser fingerprinting. Usa
puppeteer-extra-plugin-recaptchaoplaywright-extraconstealthpara evitar detección.
✅ Si usas curl, requests (Python), o HTTP raw
1. Simula un navegador real con headers completos
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "es-ES,es;q=0.9,en;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Cache-Control": "max-age=0",
}
session = requests.Session()
response = session.get("https://tu-sitio.com", headers=headers)
2. Resuelve el challenge manualmente (una sola vez) y reutiliza la cookie
- Abre el sitio en tu navegador normal.
- Espera a que cargue (puede tardar 5–10 segundos).
- Copia la cookie
cf_clearance(ver en DevTools > Application > Cookies). - Usa esa cookie en tus solicitudes posteriores:
session.cookies.set("cf_clearance", "tu-cookie-cf_clearance-aquí", domain=".tu-dominio.com")
🔑 Clave:
cf_clearancees una cookie temporal que Cloudflare emite tras superar el challenge. Sin ella, todo request será bloqueado.
Verificación rápida (CLI)
curl -v https://tu-sitio.com 2>&1 | grep -i "set-cookie"
Si no ves cf_clearance=..., el challenge no se superó.
Pro-tip: Evita el problema desde el origen
Si controlas el servidor detrás de Cloudflare:
- Usa Cloudflare "I'm Under Attack" mode OFF (solo para desarrollo).
- Configura WAF Exclusions para IPs de prueba (IPs de CI/CD, bots internos).
- Usa API Tokens o Basic Auth para endpoints que no deben pasar por el WAF.
Pero nunca deshabilites Cloudflare en producción — este error es una característica de seguridad, no un bug.
✅ Listo. Con esto el error desaparecerá de forma definitiva.
Top comments (0)