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,requestsen Python sin renderizado). - El servidor no está configurado correctamente para permitir la validación de Cloudflare (ej. bloqueo de
__cf_bmocf_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.
- Chrome:
-
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
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();
})();
⚠️ 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
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()
🌐 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-cgiestén accesibles (Cloudflare los usa para servir el JS de desafío).
🧠 Pro-tip
Nunca confíes en
requestspara sitios con Cloudflare. Si necesitas scraping fiable, usa:
playwrightopuppeteerconstealth-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)