Cómo solucionar el error "Enable JavaScript and cookies to continue"
¿Por qué ocurre?
Este mensaje aparece cuando un sitio web (especialmente uno protegido por Cloudflare) detecta que el navegador del cliente no tiene JavaScript habilitado o no permite cookies, lo cual es obligatorio para pasar el desafío de seguridad (como el JavaScript Challenge o Browser Integrity Check). En entornos de automatización (scraping, pruebas con Selenium, etc.), este error suele ocurrir porque:
- El controlador del navegador (p. ej., ChromeDriver) se está ejecutando sin cookies habilitadas.
- Se está usando una sesión de navegador sin persistencia de cookies (como
--disable-cookieso--incognitosin configuración explícita). - Se está realizando una solicitud HTTP directa (p. ej., con
requestsen Python) sin emular un navegador real ni manejar el desafío de Cloudflare. - El navegador está configurado para bloquear cookies de terceros y Cloudflare las necesita para validar la sesión.
Pasos para solucionarlo
✅ Caso 1: Automatización con Selenium (Python)
1. Configura el navegador para permitir cookies y JS
Asegúrate de no deshabilitar cookies ni JavaScript explícitamente y usa opciones estándar:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
# Asegura que las cookies y JS estén habilitados (por defecto, pero refuerzo explícito)
options.add_argument("--enable-javascript")
options.add_argument("--enable-cookies")
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd('Page.setCookie', {
"name": "test_cookie",
"value": "1",
"domain": ".example.com", # ajusta al dominio real
"path": "/",
"secure": False,
"httpOnly": False
})
driver.get("https://example.com")
2. Usa undetected-chromedriver (recomendado para Cloudflare)
pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get("https://example.com")
# Cloudflare será superado automáticamente en la mayoría de los casos
✅ Caso 2: Uso de requests o librerías HTTP directas
No funcionará si el sitio usa Cloudflare sin un solver. Debes usar una herramienta que emule un navegador real o resuelva el desafío.
Solución recomendada: cloudscraper
pip install cloudscraper
import cloudscraper
scraper = cloudscraper.create_scraper(
browser={
'browser': 'firefox',
'platform': 'windows',
'mobile': False
}
)
resp = scraper.get("https://example.com")
print(resp.text)
⚠️ Si el sitio usa Cloudflare Anti-Bot con desafíos avanzados (como JS challenge dinámico),
cloudscraperpuede fallar. En ese caso, usa Selenium + undetected-chromedriver o servicios como Browserless.io o Zenscrape.
✅ Caso 3: Configuración manual del navegador (pruebas manuales)
- En Chrome:
Configuración > Privacidad y seguridad > Cookies y otros datos de sitio > Permitir cookies. - Desactiva extensiones que bloqueen scripts (uBlock Origin, Privacy Badger, etc.).
- Reinicia el navegador y vuelve a cargar la página.
Bloque de código corregido (ejemplo definitivo con Selenium + undetected)
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Configuración robusta
uc.patch_webdriver()
driver = uc.Chrome()
try:
driver.get("https://example.com")
# Espera implícita a que cargue y Cloudflare pase la validación
WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.TAG_NAME, "body"))
)
print("✅ Acceso exitoso. Contenido:", driver.page_source[:200])
finally:
driver.quit()
Pro-tip
-
Nunca uses
--disable-javascriptni--disable-cookiesen entornos donde se requiera pasar Cloudflare. - Cloudflare cambia sus desafíos frecuentemente. Usa
undetected-chromedrivero actualiza regularmente tus herramientas. - Si el problema persiste, captura el HTML inicial y verifica si el
<script>de Cloudflare (src="/cdn-cgi/challenge-platform/h/g/orchestrate/...") está presente. Si no, el servidor está bloqueando la solicitud antes de llegar al desafío (posible IP bloqueada o cabeceras faltantes).
🔑 Clave final: El error no es técnico del código, sino de la falta de emulación de navegador real. Solución: usa un controlador real, no una solicitud HTTP simple.
Top comments (0)