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 (o un proxy similar como Brotli/WAF) bloquea la solicitud del cliente porque detecta que JavaScript y/o cookies están deshabilitados, o porque la verificación de seguridad (como un challenge de JavaScript) no se completó correctamente.


🔍 Causa técnica

Cloudflare implementa mecanismos de seguridad como:

  • JavaScript Challenge: El servidor envía una página intermedia que requiere ejecutar JS para generar un token válido (cf_chl_opt, cf_chl_hash, etc.).
  • Cookie validation: El navegador debe aceptar y enviar cookies (__cf_bm, __cfduid, etc.) para demostrar ser un cliente legítimo.

Este error ocurre cuando:

  1. El cliente (navegador o scraper) no ejecuta JavaScript (ej. curl, requests sin headless, bots).
  2. El cliente bloquea cookies (configuración de privacidad, extensiones como uBlock Origin, configuración de Firefox/Chrome restrictiva).
  3. El entorno de pruebas (ej. Selenium, Playwright) no persiste cookies ni maneja el challenge correctamente.
  4. El servidor detecta comportamiento anómalo (falta de headers como User-Agent, Accept-Language, Referer, o IPs compartidas en redes P2P/VPN).

✅ Pasos para solucionarlo

1. Si eres un usuario final

  • ✅ Habilita JavaScript en tu navegador.
  • ✅ Asegúrate de que las cookies estén permitidas (especialmente para el dominio en cuestión).
  • ✅ Desactiva temporalmente bloqueadores de anuncios o scripts (uBlock, NoScript, Privacy Badger).
  • ✅ Limpia la caché y cookies del sitio, luego recarga.

2. Si eres desarrollador (automatización/scraping)

✅ Opción A: Usa un navegador headless con soporte JS y cookies

# Ejemplo con Playwright (recomendado)
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless="new")
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://ejemplo.com", wait_until="networkidle")
    # El challenge se resuelve automáticamente si el navegador es realista
    content = page.content()
    browser.close()
Enter fullscreen mode Exit fullscreen mode

⚠️ Evita requests + BeautifulSoup para sitios protegidos por Cloudflare. No ejecutan JS y no pasan el challenge.

✅ Opción B: Usa cloudscraper (solo para casos simples)

pip install cloudscraper
Enter fullscreen mode Exit fullscreen mode
import cloudscraper

scraper = cloudscraper.create_scraper()
resp = scraper.get("https://ejemplo.com")
print(resp.text)
Enter fullscreen mode Exit fullscreen mode

❗ cloudscraper no siempre funciona con Cloudflare Under Attack Mode o versiones recientes (v4+). Requiere configuración extra y no es confiable para producción.

✅ Opción C: Simula un navegador real con headers y delay

import requests
from fake_useragent import UserAgent

headers = {
    "User-Agent": UserAgent().random,
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "es-ES,es;q=0.9,en;q=0.8",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "Cache-Control": "max-age=0",
}

session = requests.Session()
resp = session.get("https://ejemplo.com", headers=headers)
# Si falla, NO podrás avanzar sin ejecutar JS → usa Playwright.
Enter fullscreen mode Exit fullscreen mode

🧠 Pro-tip: Diagnóstico rápido

  1. Verifica si el sitio usa Cloudflare:
   curl -I https://ejemplo.com | grep -i "cf-ray\|cf-request-id\|via"
Enter fullscreen mode Exit fullscreen mode

Si ves cf-ray o via cloudflare, estás bajo protección.

  1. Abre el sitio en modo incógnito sin extensiones:

    • Si funciona → problema de configuración del navegador o extensiones.
    • Si falla → el sitio está en Under Attack Mode (Cloudflare bloquea todo tráfico no validado).
  2. En entornos automatizados, siempre usa un navegador real:

    • Playwright > Puppeteer > Selenium (en orden de confiabilidad para Cloudflare).
    • Asegúrate de que el navegador no tenga bloqueo de cookies (ignoreHTTPSErrors=True, acceptDownloads=True, etc.).

🔥 Solución definitiva: Usa Playwright con headless="new" y una configuración de contexto realista (sin bloqueo de cookies, con viewport y user-agent). Cloudflare ya no puede distinguirlo de un navegador humano.

# Configuración robusta para Playwright
page.set_extra_http_headers({
    "Accept-Language": "es-ES,es;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
})
await page.set_viewport_size({"width": 1920, "height": 1080})
await page.add_init_script("""
  Object.defineProperty(navigator, 'webdriver', { get: () => false });
""")
Enter fullscreen mode Exit fullscreen mode

Top comments (0)