Cómo solucionar el “Enable JavaScript and cookies to continue” 오류

작성자

카테고리:

← 피드로
DEV Community · Erick Eduardo Ramos · 2026-08-03 개발(SW)

Erick Eduardo Ramos

Cómo solucionar el error “Enable JavaScript and cookies to continue”

Este error aparece cuando Cloudflare (u otro proxy inverso de seguridad) detecta que el navegador del usuario no cumple con los requisitos mínimos para acceder al sitio: JavaScript está deshabilitado o las cookies no están permitidas. Pero en entornos reales, el problema suele ser más sutil: el navegador tiene JS y cookies habilitados, pero la configuración del entorno de ejecución (como un headless browser, test automation, o un scraper) no emula correctamente el comportamiento del cliente.

🔍 Causa raíz técnica

Cloudflare emite un desafío (CAPTCHA o JS challenge) para verificar que el cliente es un navegador real. Si la respuesta no cumple con el desafío (por ejemplo, porque:

  • El navegador no ejecuta el JS del desafío (headless sin soporte),
  • Las cookies no se persisten entre solicitudes,
  • El User-Agent o Accept-Language no coinciden con navegadores reales,
  • Falta el Referer o Origin en headers,
  • Se bloquean cookies de terceros (como las de Cloudflare),

… entonces el servidor devuelve este mensaje estático en lugar de redirigir a la página solicitada.

⚠️ Nota crítica: Si estás usando herramientas como curl, requests de Python, o navegadores headless sin configuración especial, no pasarás el desafío de Cloudflare. Es intencional: Cloudflare bloquea tráfico no humano por diseño.

✅ Solución definitiva (por escenario)

🛠️ Caso 1: Navegador real (usuario final)

  1. Verifica que JavaScript esté habilitado:
    • Chrome: Configuración → Privacidad y seguridad → Configuración de sitios → JavaScript → Permitido.
    • Firefox: Preferencias → Privacidad y seguridad → Cookies y datos de sitios → Deshabilitar “Bloquear cookies y datos de sitios”.
  2. Limpia cookies y caché (especialmente para *.cloudflare.com).
  3. Reinicia el navegador y vuelve a cargar la página.

🛠️ Caso 2: Automatización / Scraping (Python + Playwright/Selenium)

No uses requests o urllib: no ejecutan JS. Usa un navegador real con soporte para Cloudflare.

✅ Ejemplo con Playwright (recomendado):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)  # headless=True también funciona si se configura bien
    context = browser.new_context(
        viewport={"width": 1920, "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"
    )
    page = context.new_page()

    # Opcional: simular interacción humana para evitar bloqueos
    page.goto("https://tu-sitio.com", wait_until="networkidle")

    # Espera explícita al desafío Cloudflare y su resolución automática
    try:
        page.wait_for_selector("#challenge-error-text", timeout=5000)
        raise RuntimeError("Cloudflare bloqueó la solicitud. Asegúrate de usar un navegador real.")
    except:
        pass  # No hay desafío → todo bien

    # Procede con la navegación
    content = page.content()

Enter fullscreen mode Exit fullscreen mode

🔑 Claves:

  • Usa wait_until="networkidle" para esperar a que termine todo el JS.
  • Nunca uses headless="new" sin configuración extra: Cloudflare detecta headless moderno fácilmente.
  • Si usas headless=True, añade:
  context = browser.new_context(
      # ... otros parámetros ...
      bypass_csp=True,  # Evita bloqueos de Content Security Policy
      java_script_enabled=True,
      cookies=[{"name": "cf_clearance", "value": "...", "domain": ".tu-sitio.com"}]  # Si ya tienes un clearance válido
  )

Enter fullscreen mode Exit fullscreen mode

🛠️ Caso 3: App móvil / WebView (Android/iOS)

  • En Android: Asegúrate de que WebView.getSettings().setJavaScriptEnabled(true) y setAcceptCookies(true) estén activos.
  • En iOS: Verifica que WKWebView tenga dataStore = WKWebsiteDataStore.default() (para persistir cookies).

🧪 Verificación rápida (CLI)

Si quieres probar si el sitio responde sin desafío:

curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
     -H "Accept: text/html,application/xhtml+xml" \
     -H "Accept-Language: es-ES,es;q=0.9" \
     -H "Referer: https://www.google.com/" \
     -c /tmp/cookies.txt \
     -L https://tu-sitio.com

Enter fullscreen mode Exit fullscreen mode

Si el HTML contiene #challenge-error-text, el servidor sigue bloqueando. Necesitas emular un navegador real.

💡 Pro-tip: Evita el desafío desde el origen

Si tú controlas el backend:

  • Agrega tu IP o rango a la lista blanca de Cloudflare (Panel → Firewall → Tools → Add IP Address).
  • Usa Cloudflare Access con autenticación por token si es una API interna.
  • Para APIs públicas: desactiva el “Under Attack Mode” y ajusta las reglas de WAF para excluir endpoints de API.

⚠️ Nunca intentes “bypassear” Cloudflare sin autorización. Es una violación de sus Términos y puede generar bloqueos permanentes.

Solución definitiva resumida: Usa un navegador real (Playwright/Selenium) con cookies habilitadas, User-Agent realista y espera a que termine el JS. Si eres el propietario del sitio, configura Cloudflare para excluir tráfico legítimo.

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다