Cómo resolver Cloudflare con Go (chromedp + Scrapeless)
Lead Scraping Automation Engineer
TL;DR:
- Cloudflare puntúa el navegador, no al visitante. Lee la consistencia de la huella digital, señales de comportamiento y la IP de salida, luego establece una cookie
cf_clearancepara un navegador que confía; por lo tanto, borrar la cookie en Go significa ser un navegador de confianza, no resolver un acertijo. - Un stack de navegador local Go falla esa puntuación en tres ejes: la declaración
navigator.webdriver, una huella digital predeterminada sin cabeza y una IP de salida del centro de datos. Mantener las evasiones de forma manual es una cinta de correr. - El Scrapeless Scraping Browser supera el desafío durante el renderizado — Chromium real autodesarrollado, una huella digital consistente por sesión y salida residencial en más de 195 países, alcanzada a través de un único punto de enlace WebSocket.
- Tu Go permanece como chromedp estándar. Apunta
chromedp.NewRemoteAllocatoral punto de enlace de Scrapeless, 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 Go chromedp sobre el navegador en la nube superó la página del desafío de Cloudflare, leyó el marcador de éxito
¡Has evadido el desafío de Cloudflare! :D, y recibió una cookiecf_clearance. - Libre para empezar. Nuevas cuentas de Scrapeless incluyen tiempo de ejecución gratuito para el Scraping Browser — regístrate en app.scrapeless.com.
Introducción: superar Cloudflare en Go es un problema de navegador
Un desafío de Cloudflare no es un CAPTCHA de imagen que decodificas. Se ejecuta en segundo plano y califica 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 buena reputación. Cuando la puntuación pasa, Cloudflare establece una cookie cf_clearance y se carga la página real. Cuando no lo hace, obtienes una pantalla intersticial en lugar de contenido.
Eso replantea la tarea en Go. No hay respuesta que enviar; el trabajo consiste en presentar un navegador que Cloudflare ya confía. Un Chromium sin cabeza local impulsado por chromedp no puede: anuncia automatización a través de la propiedad navigator.webdriver, utiliza fuentes y comportamientos de lienzo predeterminados sin cabeza y sale de una IP que los servicios de reputación ya conocen. Puedes mantener tus propias evasiones y luego seguir manteniéndolas a medida que Chromium y los detectores avanzan. Esta guía toma el camino más corto: controla el Scrapeless Scraping Browser desde chromedp estándar, de modo que la huella digital, el comportamiento y la IP de salida se manejen del lado del servidor y el desafío se supere durante un renderizado normal.
Lo que Cloudflare realmente verifica
La propia documentación de Cloudflare describe un paso de verificación que se ejecuta sin interrumpir al visitante. En la práctica, califica tres cosas y concede una cookie cf_clearance — una cookie HTTP estándar — cuando pasan:
| Lo que Cloudflare lee | Por qué un navegador Go local falla |
|---|---|
| Consistencia de la huella digital | los predeterminados sin cabeza y la bandera webdriver contradicen a un Chrome real |
| Señales de comportamiento | temporización guionizada sin una superficie de navegador coherente |
| Reputación de la IP de salida | las IP de centros de datos tienen una puntuación peor que las residenciales |
Un navegador coherente y de confianza es más importante que cualquier evasión individual; por eso mover los tres elementos al lado del servidor es más duradero que los parches hechos a mano.
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, trae:
- Chromium real autodesarrollado que ejecuta el JavaScript del desafío exactamente como Chrome, por lo que resuelve en lugar de detenerse.
- Una huella digital consistente por sesión — sin la declaración
navigator.webdriver, sin 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.
- Persistencia de sesión para que un otorgamiento de
cf_clearancepueda reutilizarse en solicitudes en la misma sesión. - Una superficie de conexión — cada opción es un parámetro de consulta en el mismo punto de enlace WebSocket.
Obtén tu clave API en el plan gratuito en app.scrapeless.com.
Requisitos previos
- Un conjunto de herramientas Go (Go 1.21 o más reciente)
github.com/chromedp/chromedpygithub.com/chromedp/cdproto- Una cuenta de Scrapeless y clave API — regístrate en app.scrapeless.com
Aquí están los detalles de conexión completos que se encuentran en la documentación del Scraping Browser.
Instalación
Añade chromedp a tu módulo. Te conectas a un navegador remoto, por lo que no se requiere Chrome local.
bash
go get github.com/chromedp/chromedp
go get github.com/chromedp/cdproto
export SCRAPELESS_API_KEY=tu_token_api_aquí # clave gratuita en https://app.scrapeless.com
Conectar y despejar el desafío
chromedp se conecta a un navegador remoto con NewRemoteAllocator. Pasa el endpoint de Scrapeless con chromedp.NoModifyURL para que chromedp use la URL de WebSocket tal como está, luego espera el contenido posterior al desafío. El desafío se resuelve durante la renderización; no hay una llamada de solución separada.
Nota: ejecutar esto necesita un conjunto de herramientas de Go con los módulos chromedp instalados. Este bloque fue verificado en vivo contra el navegador en la nube de Scrapeless; agrega tu clave API y ejecútalo con
go run.
go
package main
import (
"context"
"fmt"
"net/url"
"os"
"time"
"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
)
func main() {
q := url.Values{}
q.Set("token", os.Getenv("SCRAPELESS_API_KEY"))
q.Set("sessionTTL", "180")
q.Set("proxyCountry", "US")
endpoint := "wss://browser.scrapeless.com/api/v2/browser?" + q.Encode()
target := "https://www.scrapingcourse.com/cloudflare-challenge"
allocCtx, cancel := chromedp.NewRemoteAllocator(context.Background(), endpoint, chromedp.NoModifyURL)
defer cancel()
ctx, cancel2 := chromedp.NewContext(allocCtx)
defer cancel2()
ctx, cancel3 := context.WithTimeout(ctx, 120*time.Second)
defer cancel3()
var cleared string
var cookies []*network.Cookie
err := chromedp.Run(ctx,
chromedp.Navigate(target),
chromedp.WaitVisible("#challenge-title", chromedp.ByID),
chromedp.Text("#challenge-title", &cleared, chromedp.ByID),
chromedp.ActionFunc(func(ctx context.Context) error {
c, err := network.GetCookies().Do(ctx)
cookies = c
return err
}),
)
if err != nil {
fmt.Println("error:", err)
os.Exit(1)
}
hasClearance := false
for _, c := range cookies {
if c.Name == "cf_clearance" {
hasClearance = true
}
}
fmt.Println("cleared:", cleared)
fmt.Println("cf_clearance:", hasClearance)
}
Una ejecución en vivo de este programa imprimió cleared: ¡Has superado el desafío de Cloudflare! :D y cf_clearance: true — chromedp estándar, obtenido a través del navegador en la nube.
Obtén tu clave API en el plan gratuito: app.scrapeless.com
Fijar la región para un despeje confiable
Cloudflare evalúa la IP de salida, así que fija proxyCountry a una región residencial. Cambia esto a cualquier código de país ISO. La especificación W3C WebDriver requiere que la automatización conforme exponga el flag webdriver; el navegador en la nube no lo lleva, por lo que una IP limpia tiene una huella limpia junto a ella.
go
q := url.Values{}
q.Set("token", os.Getenv("SCRAPELESS_API_KEY"))
q.Set("sessionTTL", "180")
q.Set("proxyCountry", "US") // o "DE", "JP", "CUALQUIERA"
Donde los navegadores Go locales se detienen
Un scraper local de chromedp está bien hasta que Cloudflare comienza a evaluar el navegador. Luego, la huella del navegador sin cabeza, el flag webdriver y la IP del centro de datos fallan en diferentes verificaciones, y el intersticial reemplaza el contenido. Esos son problemas de huellas, comportamiento e IP — los tres que el navegador en la nube maneja del lado del servidor. Conectarse a Scrapeless los entrega a una sesión gestionada mientras tus acciones de chromedp permanecen estándar.
Lo que obtienes de vuelta
La sesión se comporta como cualquier sesión de chromedp — Navigate, WaitVisible, Text y CDP network.GetCookies funcionan todos. Algunas observaciones honestas al 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 limpia con mucha más fiabilidad 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 través de las solicitudes de seguimiento.- Calienta la sesión para páginas obstinadas — carga la página principal 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: limpia Cloudflare, mantén tu Go
Limpiar Cloudflare en Go no se trata de decodificar un desafío, sino de presentar un navegador en el que Cloudflare confíe. El Navegador de Scraping sin Residuos maneja las tres cosas que puntúa (huella digital, comportamiento, IP de salida) del lado del servidor, por lo que tu código de chromedp solo cambia su URL de conexión. Fija proxyCountry a 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 desde Python, consulta la guía de scraper de producción de Scrapling y compara planes en la página de precios de Scrapeless.
¿Listo para construir tu pipeline que limpia Cloudflare?
Únete a nuestra comunidad para reclamar un plan gratuito y conectar con desarrolladores que scrapean sitios protegidos por Cloudflare: Discord · Telegram.
Regístrate en app.scrapeless.com para obtener tiempo de ejecución gratuito del Navegador de Scraping y apunte chromedp al navegador en la nube que limpia Cloudflare durante el renderizado.
FAQ
P: ¿Necesito un servicio separado para resolver CAPTCHA?
No en un navegador que pasa. Cloudflare principalmente puntúa huella digital, comportamiento e IP en segundo plano y emite una cookie cf_clearance. El navegador en la nube está diseñado para pasar esa puntuación durante un renderizado normal, por lo que no hay un paso de rompecabezas separado que configurar.
P: ¿Por qué NewRemoteAllocator con NoModifyURL?
NewRemoteAllocator acopla chromedp a un navegador que no lanzó. NoModifyURL indica a chromedp que utilice la URL de WebSocket de Scrapeless exactamente como se proporciona, en lugar de reescribirla para descubrir un punto final de DevTools local.
P: ¿Necesito un proxy?
No. La salida residencial está integrada; establece proxyCountry a una región o ANY. Cloudflare puntúa la IP de salida, por lo que una región residencial limpia más confiablemente que una dirección de centro de datos.
P: El desafío aún aparece en algunas páginas: ¿qué ayuda?
Fija proxyCountry a 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, para que la superficie de comportamiento se lea como una visita normal.
P: ¿Es legal limpiar Cloudflare?
Acceder a datos disponibles públicamente 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.



