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) bloquea la solicitud porque detecta que el cliente no cumple con los requisitos mínimos de seguridad: JavaScript está deshabilitado o las cookies no están permitidas.

¿Por qué ocurre?

Cloudflare implementa mecanismos de protección contra bots y ataques automatizados. Cuando una solicitud llega sin:

  • Ejecutar JavaScript (necesario para resolver el JavaScript Challenge),
  • o sin aceptar cookies (para mantener el estado de la sesión tras la validación),

...Cloudflare interrumpe la conexión y muestra este mensaje.

Causas comunes:

  • Uso de curl, wget, o scripts sin motor JS (como Node.js puro sin Puppeteer/Playwright).
  • Configuración de navegador que bloquea JavaScript o cookies.
  • Requests desde herramientas de scraping o automatización sin emular un navegador real.
  • Errores en el flujo de validación de Cloudflare (raro, pero posible si hay redirecciones rotas).

Pasos para solucionarlo

✅ 1. Si eres un usuario final (navegando):

  • Habilita JavaScript en tu navegador:
    • Chrome: Configuración > Privacidad y seguridad > Seguridad > Permitir JavaScript.
    • Firefox: Preferencias > Privacidad y seguridad > Permisos > Habilitar JavaScript.
  • Habilita cookies de terceros (si el sitio usa dominios distintos para autenticación):
    • Chrome: Configuración > Privacidad y seguridad > Cookies y otros datos de sitios > Permitir cookies de terceros.
  • Borra la caché y las cookies del dominio problemático.
  • Prueba en modo incógnito (para descartar extensiones bloqueantes).

✅ 2. Si eres desarrollador (haciendo requests programáticos)

🔧 Opción A: Usa un navegador headless (recomendado)

No intentes resolver el desafío manualmente. Usa herramientas que ejecuten JS y gestionen cookies:

# Ejemplo con Puppeteer (Node.js)
npx puppeteer-core --executable-path="/path/to/chrome" \
  --no-sandbox --disable-setuid-sandbox \
  --disable-dev-shm-usage \
  --viewport-width=1920 --viewport-height=1080 \
  --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" \
  --timeout=30000 \
  --wait-for-selector="body" \
  https://example.com
Enter fullscreen mode Exit fullscreen mode

O en código (Node.js con puppeteer):

const puppeteer = require('puppeteer');

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

  // 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.goto('https://example.com', { waitUntil: 'networkidle2' });

  // Espera a que se resuelva el desafío (Cloudflare lo hace automáticamente)
  await page.waitForSelector('body:not(:has(#challenge-error-text))', { timeout: 30000 });

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

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

🔧 Opción B: Usa cloudscraper (solo para sitios con Cloudflare básico)

⚠️ Solo funciona si Cloudflare no usa Managed Challenge o Under Attack Mode. Ya está obsoleto, pero hay forks activos.

npm install cloudscraper
Enter fullscreen mode Exit fullscreen mode
const cloudscraper = require('cloudscraper');

cloudscraper.get({
  url: 'https://example.com',
  jar: true, // Importante: gestiona cookies
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  }
}).then(body => {
  console.log(body);
}).catch(err => {
  console.error('Fallo:', err.message);
});
Enter fullscreen mode Exit fullscreen mode

🔧 Opción C: Usa playwright (más robusto que Puppeteer hoy en día)

npm install playwright
Enter fullscreen mode Exit fullscreen mode
const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext();
  const page = await context.newPage();

  await page.goto('https://example.com');
  await page.waitForLoadState('networkidle'); // Espera a que todo cargue, incluido JS

  // Si Cloudflare pide interacción manual (raro en headless), usa:
  // await page.click('#challenge-form button'); // si hay botón explícito

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

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

Pro-tip: Verifica si Cloudflare está activo y qué modo usa

  1. Abre https://www.cloudflare.com/ssl-website/ y entra tu dominio.
  2. O usa dig para ver los registros DNS y confirmar si está detrás de Cloudflare:
   dig example.com +short
   # Si ves IPs como 104.16.x.x o 172.67.x.x → está en Cloudflare.
Enter fullscreen mode Exit fullscreen mode
  1. Revisa en el panel de Cloudflare:
    • Security > Settings > Browser Integrity Check → debe estar On.
    • Security > Bot Fight Mode o Under Attack Mode → si están activos, el desafío será más estricto.

💡 Clave: Si estás haciendo scraping, no evites el desafío. Usa una estrategia de resolución real (con JS). Cloudflare detecta requests sin JS y los bloquea intencionalmente.


Solución definitiva: Usa un navegador headless real (Puppeteer/Playwright) con cookies habilitadas y espera a que se resuelva el desafío. No hay atajos seguros ni sostenibles.

Top comments (0)