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. requests en Python sin User-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-recaptcha o playwright-extra con stealth para 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_clearance es 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.