Cómo resolver el Torniquete de Cloudflare al hacer web scraping
Specialist in Anti-Bot Strategies
Resumen:
- Cloudflare Turnstile puntúa el navegador, no al usuario. Lee la consistencia de la huella digital, señales de comportamiento y la IP de salida en segundo plano, luego emite una cookie
cf_clearancea un navegador que confía — por lo que la solución es ser un navegador de confianza, no resolver un rompecabezas. - Un navegador sin cabeza local falla Turnstile en tres ejes a la vez: la indicación
navigator.webdriver, la huella digital predeterminada sin cabeza y una IP de salida de centro de datos. Parchear los tres manualmente es una cinta de mantenimiento. - El Scrapeless Scraping Browser supera Turnstile durante el renderizado — Chromium real desarrollado por ellos mismos, una huella digital consistente por sesión y salida residencial en más de 195 países, conectándose a través de un único endpoint de WebSocket.
- Tu código de automatización no cambia. Habla CDP, así que
puppeteer.connect()ychromium.connectOverCDP()funcionan tal como están; solo necesitas dirigir la conexión al navegador en la nube y leer el DOM posterior al desafío. - Turnstile se envía en tres modos — no interactivo, invisible y casilla de verificación gestionada — y los tres terminan con la misma concesión
cf_clearanceen un navegador que pasa. - 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: Turnstile puntúa el navegador, no un rompecabezas
Cloudflare Turnstile no es un CAPTCHA de imagen. Funciona 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 pasa, obtienes un intersticial en lugar de contenido.
Eso cambia lo que significa "resolver Turnstile". No hay respuesta que enviar — el trabajo consiste en presentar un navegador que Cloudflare ya confía. Un Chromium sin cabeza local no puede: anuncia automatización a través de la propiedad navigator.webdriver, viene con fuentes y comportamientos de lienzo predeterminados sin cabeza, y sale de una IP que los servicios de reputación ya conocen. Puedes parchear cada uno de esos localmente y luego seguir parchedando a medida que Chromium y los detectores cambian.
Esta guía toma el camino más corto: impulsa el Scrapeless Scraping Browser — un navegador en la nube anti-detección — con Puppeteer o Playwright que ya usas, para que la huella digital, la superficie de comportamiento y la IP de salida se manejen del lado del servidor y Turnstile se limpie durante un renderizado normal.
Qué verifica realmente Turnstile
La documentación de Turnstile de Cloudflare describe un widget que verifica a los visitantes sin interrumpirlos. En la práctica, se envía en tres modos, y el mismo navegador de la nube maneja todos ellos porque presenta un navegador real coherente en lugar de uno parcheado:
| Modo | Lo que ve el visitante | Lo que puntúa |
|---|---|---|
| No interactivo | un widget que verifica sin clic | huella digital + señales de comportamiento pasivo |
| Invisible | nada renderizado | pura puntuación de fondo |
| Gestionado | una casilla de verificación "Verifica que eres humano" | lo anterior más un evento de interacción |
Los tres resuelven en una cookie cf_clearance — una cookie HTTP estándar — establecida en un navegador que pasó. Turnstile también se basa en tokens al estilo de Privacy Pass definidos en el protocolo de emisión de Privacy Pass de la IETF, por lo que un navegador coherente y de confianza importa más que cualquier evasión única.
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 Turnstile específicamente, aporta:
- Chromium real desarrollado por ellos mismos que ejecuta el JavaScript del widget exactamente como Chrome, por lo que el desafío se resuelve en lugar de detenerse.
- Una huella digital consistente por sesión — sin indicación de
navigator.webdriver, sin predeterminados sin cabeza que se filtren. - Salida residencial en más de 195 países — Turnstile puntúa la IP de salida, y una región residencial se lee como limpia donde una IP de centro de datos no.
- Persistencia de sesión para que una concesión
cf_clearancepueda reutilizarse en solicitudes dentro de la misma sesión. - Una superficie de conexión — cada opción es un parámetro de consulta en el mismo endpoint de WebSocket.
Obtén tu clave API en el plan gratuito en app.scrapeless.com.
Requisitos previos
- Node.js 18 o más reciente
- Una cuenta Scrapeless y clave API — regístrate en app.scrapeless.com
- Familiaridad básica con Puppeteer o Playwright y la terminal
Los ejemplos a continuación han sido verificados contra la superficie CDP documentada del Navegador de Scraping. Ejecutarlos de extremo a extremo necesita una sesión de Scrapeless activa; agrega tu clave de API para ejecutar cada uno. Los detalles completos de la conexión se encuentran en la documentación del Navegador de Scraping.
Instalar
bash
npm install puppeteer-core # o: playwright-core
export SCRAPELESS_API_KEY=sk_... # clave gratuita en https://app.scrapeless.com
Configurar la conexión
Todo es un parámetro de consulta en wss://browser.scrapeless.com/api/v2/browser. Fija proxyCountry a una región residencial, ya que Turnstile puntúa la IP de salida.
javascript
import puppeteer from "puppeteer-core";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://browser.scrapeless.com/api/v2/browser?${params}`,
});
Limpiar Turnstile y leer el token
El Navegador de Scraping de Scrapeless resuelve Turnstile automáticamente durante la renderización; no hay una llamada de resolución explícita que hacer. Navegas, luego esperas a que aparezca el token de Turnstile, que es la señal de que el widget se resolvió. El scraping subsiguiente depende de ti.
javascript
import puppeteer from "puppeteer-core";
const TARGET = "https://www.scrapingcourse.com/cloudflare-challenge";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://browser.scrapeless.com/api/v2/browser?${params}`,
});
const page = await browser.newPage();
await page.goto(TARGET, { waitUntil: "domcontentloaded", timeout: 60000 });
// El navegador resuelve Turnstile automáticamente; espera a que el token confirme que se resolvió.
await page.waitForFunction(
() => window.turnstile && window.turnstile.getResponse(),
{ timeout: 60000 }
);
const token = await page.evaluate(() => window.turnstile.getResponse());
console.log("token de turnstile ->", token.slice(0, 24) + "...");
console.log("título ->", await page.title());
await browser.close();
Obtén tu clave de API en el plan gratuito: app.scrapeless.com
El mismo flujo en Playwright
Playwright se conecta al mismo navegador en la nube a través de CDP; la sesión resuelve automáticamente Turnstile durante la renderización, y esperas el token de la misma manera.
javascript
import { chromium } from "playwright-core";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const browser = await chromium.connectOverCDP(
`wss://browser.scrapeless.com/api/v2/browser?${params}`
);
const page = await browser.newPage();
await page.goto("https://www.scrapingcourse.com/cloudflare-challenge", {
waitUntil: "domcontentloaded",
});
await page.waitForFunction(() => window.turnstile && window.turnstile.getResponse());
console.log("título ->", await page.title());
await browser.close();
Confirmar el pase
La señal confiable es el token de Turnstile; una vez que window.turnstile.getResponse() devuelve un valor, el widget se resolvió y puedes continuar. Cloudflare también establece una cookie cf_clearance en la sesión aprobada, que puedes leer si necesitas llevar la aprobación a otras solicitudes.
javascript
const token = await page.evaluate(() => window.turnstile && window.turnstile.getResponse());
console.log("token de turnstile presente ->", Boolean(token));
const cookies = await page.cookies();
console.log("cf_clearance presente ->", cookies.some((c) => c.name === "cf_clearance"));
Lo que obtienes de vuelta
- La señal
navigator.webdriverestá ausente — el navegador en la nube no anuncia automatización, por lo que la primera verificación que realiza Turnstile se lee como un Chrome real. - La IP de salida coincide con
proxyCountry— una región residencial despeja mucho más confiablemente que una IP de centro de datos, que Turnstile puntúa negativamente. cf_clearanceestá presente después de un pase — reutiliza la misma sesión para llevar la aprobación a solicitudes de seguimiento.- Calienta la sesión para páginas difíciles — carga 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 parezca a una visita normal.
Conclusión: limpiar Turnstile, mantener tu código
Resolver Turnstile no se trata de responder a un desafío, sino de presentar un navegador en el que Cloudflare confía. El Scraping Browser de Scrapeless maneja las tres cosas que puntúa Turnstile (huella digital, comportamiento, IP de salida) del lado del servidor, así que tu código de Puppeteer o Playwright solo cambia su URL de conexión. Fija proxyCountry a una región residencial, calienta la sesión en la página de inicio y lee cf_clearance para confirmar el pase. Para la diferencia entre el intersticial y el widget, consulta desafío de Cloudflare vs Turnstile, y compara planes en la página de precios de Scrapeless.
¿Listo para construir tu pipeline de superación de Turnstile?
Únete a nuestra comunidad para reclamar un plan gratuito y conectar con desarrolladores que rastrean sitios protegidos por Turnstile: Discord · Telegram.
Regístrate en app.scrapeless.com para obtener un tiempo de ejecución gratuito del Scraping Browser y apunta Puppeteer o Playwright hacia el navegador en la nube que supera Turnstile durante el renderizado.
Preguntas frecuentes
P: ¿Es Turnstile un CAPTCHA que tengo que resolver con un servicio de resolución?
No en un navegador que pasa. Turnstile principalmente puntúa huellas digitales, 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 rompecabezas separado que responder.
P: ¿Maneja los modos invisibles y no interactivos también?
Sí. Los tres modos de Turnstile terminan en la misma concesión de cf_clearance, y la sesión gestionada maneja la puntuación pasiva de la misma manera que maneja la variante de casilla de verificación.
P: ¿Necesito un proxy?
No. La salida residencial está incorporada: establece proxyCountry a una región o a ANY. Turnstile puntúa la IP de salida, por lo que una región residencial se despeja de manera más confiable que una dirección de centro de datos.
P: El desafío aún se muestra 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 compatible mi código de Puppeteer o Playwright?
Sí. El Scraping Browser habla CDP, así que puppeteer.connect() y chromium.connectOverCDP() funcionan sin cambios; solo cambias la URL de conexión.
P: ¿Es legal superar Turnstile?
Accede a datos disponibles públicamente de acuerdo con los términos del sitio y la ley aplicable. Estas técnicas son para automatización autorizada, pruebas e investigación donde tienes permiso.
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.



