DEV Community

Erick Eduardo Ramos
Erick Eduardo Ramos

Posted on

Cómo solucionar el error “Enable JavaScript and cookies to continue”

Cómo solucionar el error “Enable JavaScript and cookies to continue”

Este mensaje aparece cuando Cloudflare (u otro proxy de seguridad similar) detecta que el navegador del usuario no cumple con los requisitos mínimos para acceder al sitio: JavaScript deshabilitado o cookies bloqueadas. Pero en entornos de desarrollo o automatización, este error suele ser causado por una falla en la configuración del cliente HTTP o del entorno de ejecución.


🔍 Causa raíz técnica

Cloudflare implementa un JavaScript Challenge como mecanismo anti-bot. Cuando un cliente (navegador, script, scraper, etc.) hace una solicitud HTTP sin ejecutar JavaScript ni mantener sesiones con cookies, Cloudflare responde con una página intermedia que requiere ejecutar JS para generar un token de validación (cf_clearance).

En desarrollo, esto ocurre comúnmente por:

  1. Uso de curl, requests o axios sin manejar cookies ni JS.
  2. Bloqueo de cookies por configuración del navegador o extensión (uBlock, Privacy Badger).
  3. Solicitudes desde entornos sin motor JS (Node.js sin Puppeteer, Python sin cloudscraper o requests + sesiones).
  4. Redirecciones mal manejadas tras el desafío JS.

✅ Solución definitiva (por escenario)

🧪 Caso 1: Automatización (Python, Node.js, etc.)

✅ Solución con cloudscraper (Python)

import cloudscraper

scraper = cloudscraper.create_scraper(
    browser={
        'browser': 'firefox',
        'platform': 'windows',
        'mobile': False
    }
)

url = "https://tu-sitio.com"
response = scraper.get(url)
print(response.text)
Enter fullscreen mode Exit fullscreen mode

Nota: cloudscraper resuelve el desafío JS internamente usando V8 (requiere node en el sistema o usa su versión embebida).

✅ Solución con Puppeteer (Node.js)

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: 'new',
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });
  const page = await browser.newPage();

  await page.goto('https://tu-sitio.com', { waitUntil: 'networkidle0' });

  // Espera a que Cloudflare resuelva el desafío (se detecta por la ausencia del error)
  await page.waitForSelector('#challenge-error-text', { timeout: 0, hidden: true });

  const content = await page.content();
  console.log(content);

  await browser.close();
})();
Enter fullscreen mode Exit fullscreen mode

Requiere: npm install puppeteer y Chrome/Chromium instalado.


🌐 Caso 2: Navegador web (usuario final)

  1. Habilita JavaScript:

    • Chrome: Configuración → Privacidad y seguridad → Seguridad → Habilitar JavaScript.
    • Firefox: Preferencias → Privacidad y seguridad → Permisos → Habilitar JavaScript.
    • Edge: Configuración de cookies y permisos del sitio → JavaScript → Permitir.
  2. Habilita cookies de terceros (si usas proxy, CDN o subdominios):

    • Chrome: Configuración → Privacidad y seguridad → Cookies y otros datos de sitio → Permitir cookies de terceros.
  3. Desactiva temporalmente extensiones de privacidad (uBlock Origin, Privacy Badger, Ghostery).

  4. Limpia cookies y caché del dominio problemático.


🛠️ Caso 3: Configuración del servidor (para evitar el desafío)

Si tú controlas el backend y Cloudflare:

  1. Agrega una regla de Firewall en Cloudflare para excluir IPs confiables (ej. tu servidor de pruebas).
  2. Usa "Bypass" en modo "Under Attack" → cambia a "I'm Under Attack" solo si es estrictamente necesario.
  3. Configura reglas de WAF para permitir solicitudes de tu user-agent (no recomendado para producción).

⚠️ No desactive el desafío JS en producción. Es una capa crítica de seguridad.


💡 Pro-tip: Verifica si el desafío se resolvió

Después de la solicitud, busca el cookie cf_clearance en la respuesta:

# Python example
print(scraper.cookies.get_dict())
# Debería contener: {'cf_clearance': 'xxx'}
Enter fullscreen mode Exit fullscreen mode

Si no está presente, el desafío no se resolvió y la solicitud final fallará silenciosamente.


✅ Solución aplicable al 100% de los casos reales. Usa el método según tu entorno (automatización vs navegador). No hay atajos: si Cloudflare detecta que no hay ejecución JS real, bloqueará la solicitud.

Top comments (0)