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

javascript dev.to

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 });
Enter fullscreen mode Exit fullscreen mode

2. Usa un resolver de challenges (recomendado)

npm install puppeteer-extra-plugin-stealth
Enter fullscreen mode Exit fullscreen mode
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

// ... luego lanza el navegador como antes
Enter fullscreen mode Exit fullscreen mode

💡 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)
Enter fullscreen mode Exit fullscreen mode

2. Resuelve el challenge manualmente (una sola vez) y reutiliza la cookie

  1. Abre el sitio en tu navegador normal.
  2. Espera a que cargue (puede tardar 5–10 segundos).
  3. Copia la cookie cf_clearance (ver en DevTools > Application > Cookies).
  4. Usa esa cookie en tus solicitudes posteriores:
session.cookies.set("cf_clearance", "tu-cookie-cf_clearance-aquí", domain=".tu-dominio.com")
Enter fullscreen mode Exit fullscreen mode

🔑 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"
Enter fullscreen mode Exit fullscreen mode

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.

Source: dev.to

arrow_back Back to Tutorials