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 de seguridad para acceder al sitio: JavaScript deshabilitado o cookies bloqueadas.


🔍 Raíz del problema

Cloudflare implementa mecanismos de protección como Browser Integrity Check y Challenge (desafío de JavaScript). Cuando un cliente (navegador, scraper, bot o script) intenta acceder sin ejecutar el JavaScript necesario para validar su integridad (o sin permitir cookies), Cloudflare bloquea la solicitud y muestra este mensaje.

Causas comunes:

  • El navegador tiene JavaScript deshabilitado.
  • Las cookies están bloqueadas (por configuración de privacidad, extensiones como uBlock Origin, o modo incógnito restringido).
  • Se está usando un cliente HTTP sin soporte para JS (ej. curl, requests en Python sin renderizado).
  • El servidor no está configurado correctamente para permitir la validación de Cloudflare (ej. bloqueo de __cf_bm o cf_clearance).
  • En entornos de automatización (Selenium, Puppeteer), el navegador no pasa el JavaScript challenge correctamente.

✅ Solución definitiva (por escenario)

🧪 1. Si eres un usuario final

  • Habilita JavaScript en tu navegador:
    • Chrome: Configuración > Privacidad y seguridad > Seguridad > Habilitar JavaScript.
    • Firefox: Preferencias > Privacidad y seguridad > Permisos > Habilitar JavaScript.
  • Permite cookies de terceros (especialmente de cloudflare.com).
  • Desactiva temporalmente extensiones de bloqueo (uBlock, Privacy Badger, etc.).
  • Reinicia el navegador y vuelve a intentar.

🛠️ 2. Si eres desarrollador y usas automatización (Puppeteer/Selenium)

Cloudflare bloquea bots por defecto. Usa bypasses oficiales y técnicas de evasión:

✅ Solución recomendada: puppeteer-extra + stealth-plugin

npm install puppeteer puppeteer-extra 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());

(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 explícita al desafío Cloudflare y resuélvelo
  try {
    await page.waitForSelector('#challenge-form', { timeout: 10000 });
    await page.waitForFunction(() => {
      return typeof __cfRLBypass !== 'undefined' || 
             document.querySelector('#challenge-form')?.style?.display === 'none';
    }, { timeout: 15000 });
  } catch (e) {
    console.warn('No se detectó desafío Cloudflare o ya fue superado.');
  }

  // Ahora puedes extraer contenido
  const content = await page.content();
  console.log(content);
  await browser.close();
})();
Enter fullscreen mode Exit fullscreen mode

⚠️ Importante: Cloudflare cambia sus desafíos frecuentemente. Usa siempre la versión más reciente de puppeteer-extra-plugin-stealth.


🧰 3. Si usas Python (requests/httpx)

No puedes resolver el desafío con requests puro. Necesitas un renderizador (ej. playwright o selenium):

✅ Solución con playwright (recomendado):

pip install playwright
playwright install chromium
Enter fullscreen mode Exit fullscreen mode
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context()
    page = context.new_page()

    page.goto("https://tu-sitio.com", wait_until="networkidle")

    # Espera hasta que desaparezca el desafío (o hasta que se cargue el contenido real)
    page.wait_for_selector("body:not(:has(#challenge-error-text))", timeout=30000)

    content = page.content()
    print(content)

    browser.close()
Enter fullscreen mode Exit fullscreen mode

🌐 4. Si eres administrador del sitio

Asegúrate de que:

  • El servidor no bloquea los headers necesarios (CF-Connecting-IP, CF-IPCountry, etc.).
  • No hay reglas de firewall que interfieran con el desafío JS.
  • Si usas Cloudflare, desactiva temporalmente el modo "Under Attack" (en Security > WAF) para probar.
  • Verifica que los archivos cdn-cgi estén accesibles (Cloudflare los usa para servir el JS de desafío).

🧠 Pro-tip

Nunca confíes en requests para sitios con Cloudflare. Si necesitas scraping fiable, usa:

  • playwright o puppeteer con stealth-plugin.
  • O servicios especializados como ScraperAPI, Bright Data, o Zenscrape que ya resuelven los desafíos por ti.

Verifica si el problema es del cliente o del servidor:

Abre el sitio en modo incógnito (sin extensiones). Si funciona → problema del navegador/cliente.

Si falla en todos los navegadores → problema de configuración del servidor/proxy.


Solución aplicada: Con esto el error desaparecerá. No hay atajos: si el desafío JS no se ejecuta, Cloudflare bloquea.

Top comments (0)