Cómo resolver Cloudflare con Python (Playwright + Scrapeless)
Expert Network Defense Engineer
Resumen:
- Cloudflare puntúa el navegador, no al visitante. Lee la consistencia de la huella digital, las señales de comportamiento y la IP de salida, luego establece una cookie
cf_clearancepara un navegador en el que confía; por lo tanto, resolverlo en Python significa ser un navegador de confianza, no responder un rompecabezas. - Un navegador de Python local falla en esa puntuación en tres ejes: el indicador
navigator.webdriver, una huella digital predeterminada sin cabeza y una IP de salida de centro de datos. Parchear los tres manualmente es una tarea de mantenimiento. - El Scrapeless Scraping Browser supera el desafío durante la renderización — Chromium auténtico desarrollado internamente, una huella digital consistente por sesión y salida residencial en más de 195 países, alcanzado a través de un único punto final de WebSocket.
- Tu Python sigue siendo el Playwright estándar. Conéctate con
chromium.connect_over_cdp(), espera el contenido posterior al desafío y lee la página; el único cambio es la URL de conexión. - Verificado en vivo: una sesión de Python Playwright a través del navegador en la nube superó la página del desafío de Cloudflare, leyó el marcador de éxito
¡Has eludido el desafío de Cloudflare! :D, y recibió una cookiecf_clearance. - Gratis para empezar. Las nuevas cuentas de Scrapeless incluyen tiempo de ejecución gratuito del Scraping Browser; regístrate en app.scrapeless.com.
Introducción: resolver Cloudflare en Python es un problema de navegador
Un desafío de Cloudflare no es un CAPTCHA de imagen que decodificas. Se ejecuta en segundo plano y evalúa el navegador que cargó la página — si la huella digital es internamente consistente, si las señales de interacción parecen humanas y si la IP de salida tiene una reputación limpia. Cuando la puntuación pasa, Cloudflare establece una cookie cf_clearance y la página real se carga. Cuando no, obtienes una intersticial en lugar de contenido.
Eso reconfigura la tarea de Python. No hay respuesta que enviar; el trabajo consiste en presentar un navegador en el que Cloudflare ya confía. Un Chromium sin cabeza local impulsado desde Python no puede: anuncia automatización a través de la propiedad navigator.webdriver, envía fuentes y comportamientos de lienzo predeterminados sin cabeza, y sale desde una IP que los servicios de reputación ya conocen. Puedes parchear cada uno de esos y luego seguir parcheando a medida que Chromium y los detectores evolucionan. Esta guía toma el camino más corto: impulsa el Scrapeless Scraping Browser desde Playwright estándar para Python, de modo que la huella digital, el comportamiento y la IP de salida se manejan del lado del servidor y el desafío se supera durante una renderización normal.
Qué verifica realmente Cloudflare
La documentación de Cloudflare describe un paso de verificación que se ejecuta sin interrumpir al visitante. En la práctica, evalúa tres cosas y otorga una cookie cf_clearance — una cookie estándar de HTTP — cuando pasan:
| Lo que Cloudflare lee | Por qué un navegador local de Python falla |
|---|---|
| Consistencia de la huella digital | los valores predeterminados sin cabeza y la bandera webdriver contradicen a un Chrome real |
| Señales de comportamiento | temporización programada sin una superficie de navegador coherente |
| Reputación de la IP de salida | las IP de centro de datos puntúan peor que las residenciales |
Un navegador coherente y de confianza es más importante que cualquier evasión individual, por lo que mover los tres del lado del servidor es más duradero que apilar parches de sigilo.
Por qué Scrapeless Scraping Browser
El Scrapeless Scraping Browser es un navegador en la nube personalizable y anti-detección diseñado para rastreadores web y agentes de IA. Para Cloudflare específicamente, ofrece:
- Chromium auténtico desarrollado internamente que ejecuta el JavaScript del desafío exactamente como Chrome, por lo que se resuelve en lugar de quedarse atascado.
- Una huella digital consistente por sesión — sin indicador
navigator.webdriver, sin valores predeterminados sin cabeza filtrándose. - Salida residencial en más de 195 países — Cloudflare puntúa la IP de salida, y una región residencial se lee limpia donde una IP de centro de datos no lo hace.
- Persistencia de sesión para que una concesión de
cf_clearancepueda reutilizarse a través de solicitudes en la misma sesión. - Una superficie de conexión — cada opción es un parámetro de consulta en el mismo punto final de WebSocket.
Obtén tu clave API en el plan gratuito en app.scrapeless.com.
Requisitos
- Python 3.10 o superior
- Playwright para Python (
pip install playwright) - Una cuenta de Scrapeless y clave API — regístrate en app.scrapeless.com
Detalles completos de conexión se encuentran en la documentación del Navegador de Scraping.
Instalar
Te conectas a un navegador remoto, así que no necesitas playwright install un Chromium local para este flujo.
bash
pip install playwright
export SCRAPELESS_API_KEY=tu_token_api_aqui # clave gratuita en https://app.scrapeless.com
Conectar y resolver el desafío
Construye el endpoint, conéctate con chromium.connect_over_cdp(), navega y espera a que se adjunte el contenido posterior al desafío. El desafío se resuelve durante la renderización; no hay una llamada de resolución separada.
python
import json
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
params = {"token": os.environ["SCRAPELESS_API_KEY"], "sessionTTL": "180", "proxyCountry": "US"}
endpoint = f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"
TARGET = "https://www.scrapingcourse.com/cloudflare-challenge"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint)
page = browser.new_page()
page.goto(TARGET, wait_until="domcontentloaded", timeout=90000)
# El navegador en la nube limpia Cloudflare durante la renderización; espera el contenido real.
page.wait_for_selector("#challenge-title", timeout=90000)
print("limpiado:", page.inner_text("#challenge-title"))
cookies = page.context.cookies()
print("cf_clearance:", any(c["name"] == "cf_clearance" for c in cookies))
browser.close()
Una ejecución en vivo de este script imprimió limpiado: ¡Has superado el desafío de Cloudflare! :D y cf_clearance: True — Playwright estándar para Python, obtenido a través del navegador en la nube.
Obtén tu clave API en el plan gratuito: app.scrapeless.com
Confirmar el pase y llevar la autorización
La señal confiable es el contenido real que se adjunta; una vez que el elemento posterior al desafío está presente, la página se ha limpiado. Cloudflare también establece una cookie cf_clearance en la sesión que ha pasado, que puedes leer para llevar la autorización a otras solicitudes en la misma sesión.
python
cookies = page.context.cookies()
clearance = next((c for c in cookies if c["name"] == "cf_clearance"), None)
print("cf_clearance presente:", clearance is not None)
if clearance:
print("dominio:", clearance["domain"])
Fijar la región para una limpieza confiable
Cloudflare califica la IP de salida, así que fija proxyCountry a una región residencial. Cámbiala a cualquier código de país ISO.
python
params = {
"token": os.environ["SCRAPELESS_API_KEY"],
"sessionTTL": "180",
"proxyCountry": "US", # o "DE", "JP", "CUALQUIERA"
}
Donde los navegadores locales de Python se detienen
Un scraper local basado en Playwright o solicitudes está bien hasta que Cloudflare empieza a calificar el navegador. Entonces, la huella dactilar sin cabeza, la bandera webdriver y la IP del centro de datos fallan cada una en una verificación diferente, y el intersticial reemplaza el contenido. Esos son problemas de huella dactilar, comportamiento e IP — los tres que el navegador en la nube maneja del lado del servidor. Conectándose a Scrapeless, se los entrega a una sesión administrada mientras tu código de Playwright permanece estándar.
Lo que obtienes de vuelta
La sesión se comporta como cualquier sesión de Playwright para Python — page.goto, page.wait_for_selector, page.content() y las cookies funcionan. Algunas observaciones honestas de cómo limpiar Cloudflare a través del navegador en la nube:
navigator.webdriverestá ausente, por lo que la primera verificación que ejecuta Cloudflare se lee como un Chrome real.- La IP de salida coincide con
proxyCountry— una región residencial se limpia de manera mucho más confiable que una IP de centro de datos. cf_clearanceestá presente después de un pase — reutiliza la misma sesión para llevar la autorización a solicitudes de seguimiento.- Calienta la sesión para páginas obstinadas — carga la página de inicio del sitio primero en la misma sesión antes de la página protegida, para que la superficie de comportamiento parezca una visita normal.
Conclusión: limpiar Cloudflare, mantener tu Python
Resolver Cloudflare en Python no se trata de decodificar un desafío, sino de presentar un navegador en el que Cloudflare confía. El Navegador de Scraping Sin Desperdicio maneja las tres cosas que evalúa (huella digital, comportamiento, IP de salida) del lado del servidor, por lo que tu código de Playwright para Python solo cambia su URL de conexión. Establece proxyCountry en una región residencial, espera el contenido posterior al desafío y lee cf_clearance para confirmar el paso. Para ejecutar el mismo navegador en la nube con otra biblioteca de Python, consulta la guía de scrapy de producción de Scrapling y compara los planes en la página de precios de Scrapeless.
¿Listo para construir tu pipeline que evite Cloudflare?
Únete a nuestra comunidad para reclamar un plan gratuito y conectarte con desarrolladores que scrapean sitios protegidos por Cloudflare: Discord · Telegram.
Regístrate en app.scrapeless.com para obtener gratis tiempo de ejecución del Navegador de Scraping y apunta Playwright para Python al navegador en la nube que elimina Cloudflare durante el renderizado.
Preguntas Frecuentes
P: ¿Necesito un servicio separado para resolver CAPTCHA?
No en un navegador que pasa. Cloudflare principalmente evalúa la huella digital, el comportamiento y la IP en segundo plano y emite una cookie cf_clearance. El navegador en la nube está diseñado para pasar esa evaluación durante un renderizado normal, por lo que no hay un paso de rompecabezas separado que configurar.
P: ¿Necesito un proxy?
No. La salida residencial está integrada: establece proxyCountry en una región o ANY. Cloudflare evalúa la IP de salida, por lo que una región residencial despeja más confiablemente que una dirección de centro de datos.
P: El desafío aún aparece en algunas páginas — ¿qué ayuda?
Establece proxyCountry en una región residencial y calienta la sesión cargando primero la página de inicio del sitio en la misma sesión antes de la página protegida, así la superficie de comportamiento parece una visita normal.
P: ¿Es mi código de Playwright existente compatible?
Sí. El Navegador de Scraping habla CDP, por lo que chromium.connect_over_cdp() funciona sin cambios; solo cambias la URL de conexión.
P: ¿Es legal eliminar Cloudflare?
Acceder a datos públicamente disponibles generalmente está permitido, pero las reglas varían según la jurisdicción y el sitio. Revisa los términos de servicio del objetivo, respeta las directivas de robots y consulta a un abogado para cualquier cosa sensible.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



