Volver al blog

Cómo sortear el desafío de Cloudflare en 2025: Guía completa

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

11-Feb-2025

Cloudflare está constantemente desarrollando sus medidas de seguridad, haciendo cada vez más difícil que los métodos tradicionales de scraping eludan desafíos como cloudflare-challenge y Cloudflare Turnstile. Herramientas de código abierto como FlareSolverr se han vuelto ineficaces debido a las actualizaciones de Cloudflare, dejando a los desarrolladores buscando nuevas soluciones.

En esta guía, exploraremos los métodos más efectivos en 2025 para eludir los desafíos de seguridad de Cloudflare, incluyendo:

  • Scrapeless Scraping Browser – Una API de navegador headless para scraping sin problemas
  • Scrapeless Web Unlocker – Una API robusta para renderizado e interacción JS

Ya sea que seas un experto en automatización web o un principiante, esta guía proporciona soluciones paso a paso para ayudarte a extraer datos sin encontrarte con obstáculos.

PARTE 1: Comprendiendo los desafíos y capas de seguridad de Cloudflare

Cloudflare JS Challenge

Antes de profundizar en las soluciones, es esencial comprender los mecanismos de seguridad clave de Cloudflare que bloquean las solicitudes automatizadas:

1. Desafío Cloudflare JS

El desafío JavaScript de Cloudflare (cloudflare-challenge) requiere que los navegadores ejecuten un script antes de acceder a la página solicitada. Este script genera un token de autorización almacenado en las cookies (cf_clearance). Los bots y los scrapers sin capacidad de ejecución de JavaScript fallan este desafío.

2. Cloudflare Turnstile

Turnstile es la alternativa CAPTCHA de Cloudflare, que detecta dinámicamente el tráfico no humano. A menudo requiere la ejecución de JavaScript y el seguimiento del comportamiento para completarse.

Cloudflare utiliza huellas digitales avanzadas para detectar interacciones no humanas. Esto incluye el análisis de:

4. Limitación de velocidad y prohibiciones de IP

Incluso si eludes el desafío una vez, las solicitudes repetidas desde la misma IP pueden provocar prohibiciones o un aumento de los niveles de seguridad.

PARTE 2: ¿En qué se diferencia el desafío Cloudflare JS de otros desafíos?

A diferencia de CAPTCHA, que requiere interacción del usuario, el desafío JS se ejecuta automáticamente en segundo plano, lo que lo hace menos intrusivo para los usuarios legítimos, al tiempo que bloquea el tráfico sospechoso. Sin embargo, para los extractores web y las herramientas de automatización, eludir el desafío JS puede ser difícil, ya que muchos clientes HTTP básicos y navegadores headless no pueden ejecutar JavaScript correctamente.

PARTE 3: Eludiendo el desafío Cloudflare JS con Scrapeless Scraping Browser

3.1 ¿Qué es Scrapeless Scraping Browser?

Scrapeless Scraping Browser es una solución de alto rendimiento que proporciona un entorno de navegador headless, lo que le permite eludir los desafíos de JavaScript sin tener que mantener su propia infraestructura. Se integra con Puppeteer y Playwright para una automatización perfecta.

Scrapeless Scraping Browser es la herramienta de bypass de Cloudflare más avanzada, proporciona:

✔️ 99.9% de tasa de éxito para eludir el desafío de Cloudflare

✔️ Compatibilidad perfecta con Puppeteer / Playwright

✔️ Impulsado por IA, se adapta automáticamente a las políticas de seguridad más recientes

✔️ Soporte de proxy global, reduce el riesgo de prohibición

3.2 Configuración de la clave API

Antes de usar Scrapeless Scraping Browser, obtenga una clave API:

  1. Regístrate en el panel de Scrapeless
  2. Recupera tu clave API desde la pestaña de configuración
Recupera tu clave API desde la pestaña de configuración

🎁 ¡Obtén 10,000 solicitudes de API gratis para nuevos usuarios! Regístrate ahora

3.3 Implementando el bypass de Cloudflare con Scrapeless Browser

Scrapeless proporciona una conexión WebSocket que permite a Puppeteer interactuar directamente con un navegador headless, eludiendo así el desafío de Cloudflare.

👉 Dirección completa de conexión WebSocket:

Copy
 wss://browser.scrapeless.com/browser?token=APIKey&session_ttl=180&proxy_country=ANY

Ejemplo de código: Eludendo el desafío de Cloudflare

Solo necesitamos preparar el siguiente código para conectarnos al servicio sin navegador de Scrapeless.

Copy
  import puppeteer from 'puppeteer-core';

  const API_KEY = 'your_api_key'
  const host = 'wss://browser.scrapeless.com';
  const query = new URLSearchParams({
    token: API_KEY,
    session_ttl: '180', // El ciclo de vida de una sesión del navegador, en segundos
    proxy_country: 'GB', // País del agente
    proxy_session_id: 'test_session_id', // El ID de la sesión del proxy se utiliza para mantener la IP del proxy sin cambios. El tiempo de sesión es de 3 minutos por defecto, basado en la configuración de proxy_session_duration.
    proxy_session_duration: '5' // Tiempo de sesión del agente, unidad minutos
  }).toString();

  const connectionURL = `${host}/browser?${query}`;
  const browser = await puppeteer.connect({
      browserWSEndpoint: connectionURL,
      defaultViewport: null,
  });
  console.log('¡Conectado!')

📢 ¡Prueba Scrapeless gratis hoy y elude Cloudflare fácilmente! 👉 Regístrate ahora

Visita un sitio web protegido por Cloudflare y verificación de captura de pantalla

A continuación, usamos scrapeless browserless para acceder directamente al sitio de prueba cloudflare-challenge y agregar una captura de pantalla, lo que nos permite ver el efecto de manera muy intuitiva. Antes de tomar la captura de pantalla, ten en cuenta que debes usar waitForSelector para esperar los elementos en la página, asegurándote de que el desafío de Cloudflare se haya eludido correctamente.

Copy
  const page = await browser.newPage();
  await page.goto('https://www.scrapingcourse.com/cloudflare-challenge', {waitUntil: 'domcontentloaded'});
  // Esperando elementos en la página del sitio, asegurando que el desafío de Cloudflare se haya eludido correctamente.
  await page.waitForSelector('main.page-content .challenge-info', {timeout: 30 * 1000})
  await page.screenshot({path: 'challenge-bypass.png'});

¡Felicidades! 🎉 has eludido el desafío de Cloudflare con scrapeless browserless.
eludido el desafío de Cloudflare con scrapeless browserless

Además, después de superar el desafío de Cloudflare, también puedes recuperar los encabezados de solicitud y la cookie cf_clearance de la página de éxito.

Copy
const cookies = await browser.cookies()
const cfClearance = cookies.find(cookie => cookie.name === 'cf_clearance')?.value

Activa la intercepción de solicitudes para capturar los encabezados de solicitud, haz coincidir las solicitudes de página después del desafío de Cloudflare.

Copy
await page.setRequestInterception(true);
page.on('request', request => {
  // Coincidir las solicitudes de página después del desafío de Cloudflare
  if (request.url().includes('https://www.scrapingcourse.com/cloudflare-challenge') && request.headers()?.['origin']) {
    const accessRequestHeaders = request.headers();
    console.log('[access_request_headers] =>', accessRequestHeaders);
  }
  request.continue();
});

PARTE 4: Eludiendo Cloudflare Turnstile con Scrapeless Scraping Browser

De manera similar, cuando te enfrentas a Cloudflare Turnstile, el navegador scrapeless todavía puede manejarlo automáticamente. El ejemplo a continuación visita el sitio de prueba cloudflare-turnstile. Después de ingresar el nombre de usuario y la contraseña, utiliza el método waitForFunction para esperar los datos de window.turnstile.getResponse(), asegurando que el desafío se haya eludido correctamente. Luego toma una captura de pantalla y hace clic en el botón de inicio de sesión para navegar a la siguiente página.

Copy
  const page = await browser.newPage();
  await page.goto('https://www.scrapingcourse.com/login/cf-turnstile', { waitUntil: 'domcontentloaded' });
  await page.locator('input[type="email"]').fill('admin@example.com')
  await page.locator('input[type="password"]').fill('password')
  // Esperar a que Turnstile se desbloquee correctamente
  await page.waitForFunction(() => {
    return window.turnstile && window.turnstile.getResponse();
  });
  await page.screenshot({ path: 'challenge-bypass-success.png' });
  await page.locator('button[type="submit"]').click()
  await page.waitForNavigation()
  await page.screenshot({ path: 'next-page.png' });

Al ejecutar este script, podrás ver el efecto de desbloqueo a través de la captura de pantalla.
Eludiendo Cloudflare Turnstile con Scrapeless Scraping Browser

PARTE 5: Usando Scrapeless Web Unlocker para el renderizado de JavaScript

Scrapeless Web Unlocker permite el renderizado de JavaScript y las interacciones dinámicas, lo que lo convierte en una herramienta efectiva para eludir Cloudflare.

Renderizado de JavaScript

El renderizado de JavaScript permite el manejo de contenido cargado dinámicamente y SPA (aplicaciones de una sola página). Habilita un entorno de navegador completo, que admite interacciones de página y requisitos de renderizado más complejos.
js_render=true, usaremos el navegador para solicitar

Copy
{
  "actor": "unlocker.webunlocker",
  "input": {
    "url": "https://www.google.com/",
    "js_render": true
  },
  "proxy": {
    "country": "US"
  }
}

Instrucciones de JavaScript

Proporciona un amplio conjunto de directivas de JavaScript que le permiten interactuar dinámicamente con las páginas web.

Estas directivas le permiten hacer clic en elementos, rellenar formularios, enviar formularios o esperar a que aparezcan elementos específicos, lo que proporciona flexibilidad para tareas como hacer clic en un botón "leer más" o enviar un formulario.

Copy
{
  "actor": "unlocker.webunlocker",
  "input": {
    "url": "https://example.com",
    "js_render": true,
    "js_instructions": [
      {
        "wait_for": [
          ".dynamic-content",
          30000
        ]
        // Esperar al elemento
      },
      {
        "click": [
          "#load-more",
          1000
        ]
        // Hacer clic en el elemento
      },
      {
        "fill": [
          "#search-input",
          "search term"
        ]
        // Rellenar el formulario
      },
      {
        "keyboard": [
          "press",
          "Enter"
        ]
        // Simular pulsación de tecla
      },
      {
        "evaluate": "window.scrollTo(0, document.body.scrollHeight)"
        // Ejecutar JS personalizado
      }
    ]
  }
}

Ejemplo de bypass de desafío

El siguiente código de ejemplo usa axios para hacer una solicitud al servicio Web Unlocker de Scrapeless. Habilita js_render y usa la directiva wait_for del parámetro js_instructions para esperar un elemento en la página después de que se haya eludido el desafío de Cloudflare:

Copy
import axios from 'axios'

async function sendRequest() {
  const host = "api.scrapeless.com";
  const url = `https://${host}/api/v1/unlocker/request`;
  const API_KEY = 'your_api_key'

  const payload = {
    actor: "unlocker.webunlocker",
    proxy: {
      country: "US"
    },
    input: {
      url: "https://www.scrapingcourse.com/cloudflare-challenge",
      js_render: true,
      js_instructions: [
        {
          wait_for: [
            "main.page-content .challenge-info",
            30000
          ]
        }
      ]
    },
  }

  try {
    const response = await axios.post(url, payload, {
      headers: {
        'Content-Type': 'application/json',
        'x-api-token': API_KEY
      }
    });
    console.log("[page_html_body] =>", response.data);
  } catch (error) {
    console.error('Error:', error);
  }
}
sendRequest();

🎉 Después de ejecutar el script anterior, podrás ver el HTML de la página que ha eludido correctamente el desafío de Cloudflare en la consola.
eludido correctamente el desafío de Cloudflare en la consola

Scrapeless - Una solución más potente para desbloquear sitios web dinámicos

Para sitios web dinámicos, carga Ajax y aplicaciones de una sola página (SPA), Scrapeless proporciona Web Unlocker, que puede resolver automáticamente los desafíos de Cloudflare para evitar ser detectado como un robot.

✅ Bypass automático impulsado por IA, adaptándose a las actualizaciones anti-rastreo de Cloudflare
✅ Soporte de grupo de proxy global, bypass estable de restricciones de IP
✅ Compatibilidad perfecta con Puppeteer / Playwright

💡 ¡Prueba Scrapeless Web Unlocker ahora y rastrea fácilmente los datos del sitio web dinámico! 👉 Experimenta ahora

Preguntas frecuentes sobre el desafío de Cloudflare

P: ¿Qué es un desafío de Cloudflare?
R: Un desafío de Cloudflare es una medida de seguridad utilizada para proteger los sitios web de actividades maliciosas como ataques de bots y ataques DDoS. Cuando Cloudflare detecta un comportamiento sospechoso, presenta un desafío al visitante para verificar que es un usuario legítimo.

P: ¿Por qué me están desafiando en un sitio protegido por Cloudflare?

R: Podrías ser desafiado por varias razones, incluyendo una alta puntuación de amenaza asociada con tu dirección IP, un historial de actividad sospechosa desde tu IP, detección de tráfico automatizado similar a un bot, o reglas específicas establecidas por el propietario del sitio web dirigidas a tu región o agente de usuario. Cloudflare también verifica que tu navegador cumpla con ciertos estándares.

P: ¿Cuáles son los diferentes tipos de desafíos de Cloudflare?

R: Cloudflare utiliza diferentes tipos de desafíos, incluyendo Desafíos Gestionados, Desafíos JS y Desafíos Interactivos. Los Desafíos Gestionados son recomendados, donde Cloudflare elige dinámicamente el tipo de desafío apropiado en función de las características de la solicitud. Los Desafíos JS presentan una página que requiere procesamiento de JavaScript por parte del navegador. Los Desafíos Interactivos requieren que el visitante interactúe con la página para resolver acertijos.

P: ¿Qué es un Desafío Gestionado?

R: Los Desafíos Gestionados son un sistema dinámico donde Cloudflare selecciona el tipo de desafío apropiado en función de las características de la solicitud. Esto puede incluir páginas de desafío no interactivas, desafíos interactivos personalizados o Tokens de Acceso Privado. El objetivo es minimizar el uso de CAPTCHA y reducir el tiempo que los usuarios dedican a resolverlos.

¡Únete a la Comunidad Discord de Scrapeless hoy! 🚀 Conéctate con expertos en scraping, obtén consejos exclusivos sobre cómo eludir los desafíos de Cloudflare y mantente actualizado sobre las últimas funciones. Haz clic aquí para unirte ahora.

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.

Artículos más populares

Catalogar