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 inverso de seguridad) bloquea la solicitud del cliente porque detecta que el navegador no cumple con los requisitos mínimos de seguridad: JavaScript deshabilitado o cookies bloqueadas.

¿Por qué ocurre?

Cloudflare implementa un desafío de seguridad (JavaScript challenge) para distinguir entre navegadores reales y bots/máquinas. Cuando el navegador no ejecuta JavaScript (o no acepta cookies), Cloudflare no puede verificar la identidad del cliente y muestra este mensaje. Casos comunes:

  • Solicitudes desde entornos sin JS (ej. curl, scripts en Python sin headless browser).
  • Navegadores con JavaScript deshabilitado o bloqueado por extensiones (uBlock Origin, NoScript).
  • Configuraciones de privacidad estrictas que bloquean cookies de terceros (como las de Cloudflare).
  • Uso de proxies o navegadores headless mal configurados (ej. Puppeteer sin javascriptEnabled: true).

Pasos para solucionarlo

✅ 1. Verifica que JavaScript esté habilitado en el navegador

  • Chrome/Edge/Firefox:

    Configuración → Privacidad y seguridad → Seguridad → Habilitar JavaScript

    (O usa chrome://settings/content/javascript)

  • Firefox:

    about:config → javascript.enabled = true

✅ 2. Permite cookies de Cloudflare

  • Chrome/Edge:

    Configuración → Privacidad y seguridad → Cookies y otros datos de sitio → Agregar a la lista de excepciones

    Agrega: *.cloudflare.com

  • Firefox:

    Configuración → Privacidad y seguridad → Cookies y datos de sitio → Excepciones → Permitir

✅ 3. Si usas scripts automatizados (Puppeteer, Playwright, Selenium)

🔧 Corrección para 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); // Explicitamente habilitado
await page.setCookie({
  name: 'cf_clearance',
  value: 'dummy-value', // Solo si ya tienes el token (ver abajo)
  domain: '.tudominio.com'
});
Enter fullscreen mode Exit fullscreen mode

🔧 Corrección para Playwright (Node.js)

const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
  javaScriptEnabled: true,
  permissions: ['cookies']
});
const page = await context.newPage();
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: Resuelve el desafío manualmente primero

  1. Abre el sitio en un navegador real.
  2. Completa el desafío (espera a que cargue la página).
  3. Copia la cookie cf_clearance (desde DevTools → Application → Cookies).
  4. Reutilízala en tu script automatizado.

✅ 4. Desactiva temporalmente extensiones de bloqueo

  • Deshabilita uBlock Origin, NoScript, Privacy Badger, etc.
  • Prueba en modo incógnito (donde muchas extensiones no se cargan).

✅ 5. Si eres el administrador del sitio (backend)

  • Asegúrate de que el encabezado Set-Cookie incluya SameSite=None; Secure para cookies de Cloudflare.
  • Verifica que el dominio no esté en modo "Under Attack" en el panel de Cloudflare.
  • Considera usar Bypass Challenge (Cloudflare for SaaS) si necesitas automatización sin desafíos.

Bloque de código corregido (ejemplo práctico con Puppeteer)

import puppeteer from 'puppeteer';

(async () => {
  const browser = await puppeteer.launch({
    headless: 'new',
    args: [
      '--disable-features=IsolateOrigins,site-per-process',
      '--disable-web-security',
      '--disable-features=BlockInsecurePrivateNetworkRequests'
    ]
  });

  const page = await browser.newPage();
  await page.setJavaScriptEnabled(true);

  // Opcional: cargar cookies previamente capturadas
  // await page.setCookie({ name: 'cf_clearance', value: 'xxx', domain: '.tudominio.com' });

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

  // Ahora la página se carga sin el desafío
  const content = await page.content();
  console.log(content.includes('Enable JavaScript') ? '❌ ERROR: Desafío no superado' : '✅ ÉXITO');

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

Pro-tip

No intentes "burlar" el desafío con regex o scraping estático. Cloudflare usa técnicas avanzadas (fingerprinting, behavior analysis, bot management). La única solución sostenible es:

  • Para usuarios finales: Usa un navegador real con JS y cookies activos.
  • Para automatización: Usa un navegador headless real (Puppeteer/Playwright) + cookies válidas (cf_clearance) + respeto a los límites de tasa (rate limiting).
  • Para desarrolladores de APIs: Implementa autenticación explícita (OAuth, API keys) en lugar de depender de scraping de páginas protegidas.

Top comments (0)