CAPSOLVER
Blog
Cómo resolver Cloudflare al scraping web en 2024 | Guía paso a paso

Cómo resolver Cloudflare al hacer scraping web en 2026 | Guía paso a paso

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

09-Dec-2025

Códigos de estado comunes de Cloudflare al realizar web scraping

Error 1020

El error 1020 de Cloudflare indica que el acceso ha sido denegado. Este error se activa cuando se viola una regla del firewall del sitio web, protegido por Cloudflare. Varios actos, como realizar solicitudes excesivas al sitio, pueden provocar esta violación.

Formas comunes de resolver este problema:

  • Utilizar un proxy rotatorio para ocultar tu dirección IP.
  • Cambiar y rotar los encabezados User-Agent.
  • Asegúrate de que tu cliente HTTP soporte TLS si utilizas la biblioteca requests.
  • Utilizar herramientas de automatización de navegadores como Puppeteer, Playwright o Selenium.

Error 1015 / límite de tasas 429

El error 1015 de Cloudflare ocurre cuando tu dirección IP es marcada y bloqueada por Cloudflare por exceder el límite de tasas de un sitio durante actividades de scraping. Esto puede llevar a que encuentres este error.
Formas comunes de resolver este problema:

  • Usar proxies rotatorios o un grupo de proxies grande.
  • Verifica que el sitio no pueda rastrearte a través de tus encabezados, ya que algunos encabezados podrían hacer que te rastreen y limiten tus solicitudes.
  • Asegúrate de que no estés siendo fingerprinteado a través de la huella dactilar TLS, TCP, o cualquier otro método de fingerprinting.

Error 403

Un código de estado 403 es una respuesta "Prohibido", emitida por un servidor cuando reconoce una solicitud como válida pero se niega a cumplirla. Esto puede ocurrir debido a la falta de encabezados necesarios en tu solicitud, como encabezados CORS, JWT o de autenticación que el servidor espera.

Si el sitio es generalmente accesible y agregar los encabezados correctos no resuelve el problema, es posible que el servidor esté detectando tus solicitudes como automatizadas.
Formas comunes de resolver este problema:

  • No estás enviando los encabezados correctos, información de la solicitud.
  • El proxy ha sido bloqueado
  • Es necesario resolver un desafío de JavaScript, consulta el blog sobre Cloudflare Challenge 5s para entender cómo resolverlo.
  • El sitio no permite ningún tráfico

Canjea tu código de bonificación de CapSolver

¡Aumenta tu presupuesto de automatización de inmediato!
Usa el código de bonificación CAPN al recargar tu cuenta de CapSolver para obtener un 5% adicional en cada recarga — sin límites.
Canjéalo ahora en tu Panel de CapSolver
.

Identificar Cloudflare Challenge 5s y Cloudflare Turnstile Captcha

Cloudflare Challenge 5s

El desafío de Cloudflare se ve así:

A veces, esta página podría tener turnstile

Verifica que necesites resolver el Cloudflare Challenge 5s y no solo turnstile, para solo turnstile, por favor sigue leyendo este blog.

Hay algunos requisitos al resolver este desafío usando Capsolver.

  • Proxy
  • Clave de API de Capsolver

Enviar la información de la tarea a Capsolver

json Copy
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json

{
  "clientKey": "TU_CLAVE_DE_API",
  "task": {
    "type": "AntiCloudflareTask",
    "websiteURL": "https://www.tusitio.com",
    "proxy": "158.120.100.23:334:user:pass"
  }
}

Después de enviar correctamente, la API devolverá un taskId

json Copy
{
    "errorId": 0,
    "taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
    "status": "idle"
}

Obtén este valor taskId y úsalo para recuperar el resultado utilizando el método getTaskResult

Recuperar el resultado

json Copy
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json

{
  "clientKey": "TU_CLAVE_DE_API",
  "taskId": "taskId"
}

Dependiendo de la carga del sistema, obtendrás los resultados en un intervalo de 1s a 20s

Si recibes ERROR_CAPTCHA_SOLVE_FAILED en la respuesta, podría ser por varias razones:

  • Tu proxy no necesita resolver el desafío Cloudflare 5s (Algunos sitios solo lo habilitan para proxies malos, acciones de bots o cualquier cosa que pueda hacer que la solicitud sea realizada por un bot). Otras veces está habilitado siempre, depende de la configuración.
  • Tu proxy está bloqueado por Cloudflare y está en un bucle que no puede pasar el desafío
  • El sitio no utiliza Cloudflare Challenge, verifica que sea un desafío y no un turnstile, revisa las imágenes de ejemplo.
  • El proxy está dando tiempos de espera, esto es común al usar proxies residenciales

Si recibes una respuesta de éxito, se verá así:

json Copy
{
    "errorId": 0,
    "taskId": "d8d3a8b4-30cc-4b09-802a-a476ca17fa54",
    "status": "ready",
    "solution": {
        "accept-language": "en-US,en;q=0.9",
        "cookies": {

        },
        "headers": {
            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
            "accept-encoding": "gzip, deflate, br",
            "accept-language": "en-US,en;q=0.9",
            "cache-control": "max-age=0",
            "content-type": "application/x-www-form-urlencoded",
            "origin": "",
            "referer": "",
            "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
            "sec-ch-ua-arch": "\"arm\"",
            "sec-ch-ua-bitness": "\"64\"",
            "sec-ch-ua-full-version": "\"120.0.6099.71\"",
            "sec-ch-ua-full-version-list": "\"Not_A Brand\";v=\"8.0.0.0\", \"Chromium\";v=\"120.0.6099.71\", \"Google Chrome\";v=\"120.0.6099.71\"",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-model": "\"\"",
            "sec-ch-ua-platform": "\"macOS\"",
            "sec-ch-ua-platform-version": "\"10.14.6\"",
            "sec-fetch-dest": "document",
            "sec-fetch-mode": "navigate",
            "sec-fetch-site": "same-origin",
            "sec-fetch-user": "?1",
            "upgrade-insecure-requests": "1",
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        },
        "proxy": "tu proxy",
        "token": "token de cf clearance",
        "type": "challenge",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
}

De esta respuesta, necesitarás analizar los valores de cookies, headers, token.

Tu solicitud deberá verse así:

  • Los encabezados de la solicitud deben ser los mismos que nos devolvimos en la respuesta
  • Las cookies de la solicitud deben ser las mismas que nos devolvimos en la respuesta
  • El cliente de la solicitud debe soportar la configuración TLS, en este caso utiliza TLS Chrome 120
  • Usa el mismo proxy para interactuar en el sitio web y para usar la cookie cf_clearance
  • El valor del token será el valor de la cookie cf_clearance que necesitarás crear

Ejemplo para resolver Cloudflare Challenge con Python

python Copy
# -*- coding: utf-8 -*-
import requests
import time
import tls_client

# TODO: Tu clave de API
API_KEY = ""
proxy = ""

# TODO: Tu URL del sitio objetivo:
page_url = ''



def call_capsolver():
    data = {
        "clientKey": API_KEY,
        "task": {
            "type": 'AntiCloudflareTask',
            "websiteURL": page_url,
            "proxy": proxy,
        }
    }
    uri = 'https://api.capsolver.com/createTask'
    res = requests.post(uri, json=data)
    resp = res.json()
    task_id = resp.get('taskId')
    if not task_id:
        print("no se obtuvo taskId:", res.text)
        return
    print('taskId creado:', task_id)

    while True:
        time.sleep(1)
        data = {
            "clientKey": API_KEY,
            "taskId": task_id
        }
        response = requests.post('https://api.capsolver.com/getTaskResult', json=data)
        resp = response.json()
        status = resp.get('status', '')
        if status == "ready":
            print("éxito => ", response.text)
            return resp.get('solution')
        if status == "failed" or resp.get("errorId"):
            print("falló! => ", response.text)
            return


def request_site(solution):
    session = tls_client.Session(
        client_identifier="chrome_120",
        random_tls_extension_order=True
    )
    return session.get(
        page_url,
        headers=solution.get('headers'),
        cookies=solution.get('cookies'),
        proxy=proxy,
    )


def main():
    solution = {
        "headers": {
            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
            "upgrade-insecure-requests": "1",
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
            "sec-fetch-site": "none",
            "sec-fetch-mode": "navigate",
            "sec-fetch-user": "?1",
            "sec-fetch-dest": "document",
            "accept-encoding": "gzip, deflate, br",
            "accept-language": "en-US,en;q=0.9",
        }
    }
    # primera solicitud (verifica tu proxy):
    res = request_site(solution)
    print('1. código de estado de la respuesta:', res.status_code)
    if res.status_code != 403:
        print("tu proxy es bueno y no obtuviste el desafío de Cloudflare")
        return
    elif 'window._cf_chl_opt' not in res.text:
        print('==== proxy bloqueado ==== ')
        return

    # llamar a CapSolver:
    solution = call_capsolver()
    if not solution:
        return

    # segunda solicitud (verificar la solución):
    res = request_site(solution)
    print('2. código de estado de la respuesta:', res.status_code)


if __name__ == '__main__':
    main()

Cloudflare Turnstile Captcha

El Captcha de Cloudflare Turnstile se ve así:

  • Desafío gestionado

  • Desafío no interactivo

  • Desafío invisible
    no visible, puedes revisar en la red / scripts cargados y ver si se usa turnstile

Verifica que necesites resolver el Captcha de Cloudflare Turnstile y no el Cloudflare Challenge 5s, para solo Cloudflare Challenge, por favor sigue leyendo este blog.

Hay algunos requisitos al resolver este desafío usando Capsolver.

  • Clave de API de Capsolver

Enviar la información de la tarea a Capsolver

json Copy
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json

{
  "clientKey": "TU_CLAVE_DE_API",
  "task": {
    "type": "AntiTurnstileTaskProxyLess",
    "websiteURL": "https://www.tusitio.com",
    "websiteKey": "0x4XXXXXXXXXXXXXXXXX",
    "metadata": {
       "action": "login",  //opcional
       "cdata": "0000-1111-2222-3333-ejemplo-cdata"  //opcional
    }
  }
}

"action" y "cdata" son opcionales, a veces se requieren y otras no.
Depende de la configuración del sitio web.
action es el valor del atributo data-action del elemento Turnstile si existe.
cdata es el valor del atributo data-cdata del elemento Turnstile si existe.
Después de enviar correctamente, la API devolverá un taskId

json Copy
{
    "errorId": 0,
    "taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
    "status": "idle"
}

Obtén este valor taskId y úsalo para recuperar el resultado utilizando el método getTaskResult

Recuperar el resultado

json Copy
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json

{
  "clientKey": "TU_CLAVE_DE_API",
  "taskId": "taskId"
}

Dependiendo de la carga del sistema, obtendrás los resultados en un intervalo de 1s a 20s

Si recibes ERROR_CAPTCHA_SOLVE_FAILED en la respuesta, podría ser por varias razones:

  • Tu proxy no necesita resolver el desafío Cloudflare 5s (Algunos sitios solo lo habilitan para proxies malos, acciones de bots o cualquier cosa que pueda hacer que la solicitud sea realizada por un bot). Otras veces está habilitado siempre, depende de la configuración.
  • Tu proxy está bloqueado por Cloudflare y está en un bucle que no puede pasar el desafío
  • El sitio no utiliza desafíos de Cloudflare, verifica que sea un desafío y no un turnstile, revisa las imágenes de ejemplo.
  • El proxy está dando tiempos de espera, esto es común al usar proxies residenciales

Si recibes una respuesta de éxito, se verá así:

json Copy
{
    "errorId": 0,
    "taskId": "d1e1487a-2cd8-4d4a-aa4d-4ba5b6c65484",
    "status": "ready",
    "solution": {
        "token": "0.cZJPqwnyDxL86HvAXSk4lUTQhjwfyXDcR3qpVwFofuzosoKr1otKj_A-utazXx_Tnp1B2V6womrltBpRw9HbY851ktpaF7sBN-gQwtoRUew4Wj5PO4-WLYPnNRpXxludXzyQ.1oHJhu7619fb8c07ab942bd1587bc76e0e3cef95c7aa75400c4f7d3",
        "type": "turnstile",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
}

De esta respuesta, necesitarás analizar el valor de token y este será la solución del captcha que necesitarás enviar al sitio web.

Ejemplo para resolver el desafío de Cloudflare con Python

python Copy
import time
from curl_cffi import requests

CAPSOLVER_API_KEY = "Tu clave de API de CAPSOLVER.COM"
PAGE_URL = ""
WEBSITE_KEY = ""

def solvecf(metadata_action=None, metadata_cdata=None):
    url = "https://api.capsolver.com/createTask"
    task = {
        "type": "AntiTurnstileTaskProxyLess",
        "websiteURL": PAGE_URL,
        "websiteKey": WEBSITE_KEY,
    }
    if metadata_action or metadata_cdata:
        task["metadata"] = {}
        if metadata_action:
            task["metadata"]["action"] = metadata_action
        if metadata_cdata:
            task["metadata"]["cdata"] = metadata_cdata
    data = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": task
    }
    response_data = requests.post(url, json=data).json()
    print(response_data)
    return response_data['taskId']


def solutionGet(taskId):
    url = "https://api.capsolver.com/getTaskResult"
    status = ""
    while status != "ready":
        data = {"clientKey": CAPSOLVER_API_KEY, "taskId": taskId}
        response_data = requests.post(url, json=data).json()
        print(response_data)
        status = response_data.get('status', '')
        print(status)
        if status == "ready":
            return response_data['solution']

        time.sleep(2)


def main():
    start_time = time.time()
    
    taskId = solvecf()
    solution = solutionGet(taskId)
    if solution:
        user_agent = solution['userAgent']
        token = solution['token']

    print("User_Agent:", user_agent)
print("Captcha de Turnstile resuelto, token:", token)

    end_time = time.time()
    elapsed_time = end_time - start_time
    print(f"Tiempo para resolver el captcha: {elapsed_time} segundos")

if __name__ == "__main__":
    main()

Ejemplo para resolver el desafío de Cloudflare con NodeJS

js Copy
const axios = require('axios');

const CAPSOLVER_API_KEY = "";
const PAGE_URL = "";
const WEBSITE_KEY = "";

async function solvecf(metadata_action = null, metadata_cdata = null) {
    const url = "https://api.capsolver.com/createTask";
    const task = {
        type: "AntiTurnstileTaskProxyLess",
        websiteURL: PAGE_URL,
        websiteKey: WEBSITE_KEY,
    };
    if (metadata_action || metadata_cdata) {
        task.metadata = {};
        if (metadata_action) {
            task.metadata.action = metadata_action;
        }
        if (metadata_cdata) {
            task.metadata.cdata = metadata_cdata;
        }
    }
    const data = {
        clientKey: CAPSOLVER_API_KEY,
        task: task
    };
    const response = await axios.post(url, data);
    console.log(response.data);
    return response.data.taskId;
}

async function solutionGet(taskId) {
    const url = "https://api.capsolver.com/getTaskResult";
    let status = "";
    while (status !== "ready") {
        const data = { clientKey: CAPSOLVER_API_KEY, taskId: taskId };
        const response = await axios.post(url, data);
        console.log(response.data);
        status = response.data.status;
        console.log(status);
        if (status === "ready") {
            return response.data.solution;
        }
        await new Promise(resolve => setTimeout(resolve, 2000));
    }
}

async function main() {
    const start_time = Date.now();
    
    const taskId = await solvecf();
    const solution = await solutionGet(taskId);
    if (solution) {
        const user_agent = solution.userAgent;
        const token = solution.token;

        console.log("Usuario:", user_agent);
        console.log("Captcha de Turnstile resuelto, token:", token);
    }

    const end_time = Date.now();
    const elapsed_time = (end_time - start_time) / 1000;
    console.log(`Tiempo para resolver el captcha: ${elapsed_time} segundos`);
}

main().catch(console.error);

🏁 Conclusión

Cloudflare implementa múltiples mecanismos de protección — desde bloques HTTP estándar como 1020, 403, 429 (1015) hasta desafíos más avanzados como el desafío 5s de Cloudflare y el Captcha de Turnstile. Al realizar raspado de web o automatización, identificar qué protección está activa es el primer paso clave.

Este guía explicó los códigos de estado comunes de Cloudflare, cómo distinguir entre el desafío 5s y el Captcha de Turnstile, y proporcionó ejemplos funcionales para resolverlos usando la API de Capsolver, incluyendo implementaciones en Python y NodeJS.

Elija el enfoque adecuado — rotación de proxies, encabezados adecuados, protección de huella digital o resolver programáticamente el CAPTCHA/desafío — para mejorar significativamente las tasas de éxito en el raspado y reducir los bloqueos.

Si sus solicitudes aún están siendo marcadas, revise su configuración de raspador: la calidad del proxy, los encabezados, la huella de TLS y la frecuencia de las solicitudes suelen ser tan importantes como el solucionador de CAPTCHA en sí mismo.


❓ Preguntas frecuentes (FAQs)

1. ¿Cómo sé si estoy enfrentando el desafío 5s de Cloudflare o el Captcha de Turnstile?

Verifique la interfaz de usuario o las solicitudes de red.

  • Si aparece una página de "Verificando su navegador..." de 5 segundos → desafío 5s
  • Si aparece un widget con verificación (o generación de token invisible) → Captcha de Turnstile

2. ¿Por qué aún me bloquean después de resolver el desafío?

Posibles razones:

  • El proxy está prohibido o es de baja calidad
  • Faltan o son incorrectos los encabezados al reutilizar la solución
  • No se mantiene el mismo proxy en todas las solicitudes
  • La huella de TLS no coincide

3. ¿Siempre necesito un proxy al resolver Cloudflare?

  • El desafío 5s requiere un proxy
  • Turnstile permite ProxyLess, pero un proxy puede ayudar a evitar restricciones en sitios sensibles

4. ¿Puedo automatizar la resolución de Cloudflare a gran escala?

Sí. Con proxies buenos, rotación de huellas digitales y lógica para reutilizar tokens, puede escalar el raspado — asegúrese de cumplir con los términos del sitio web y las regulaciones legales locales.

5. ¿Es más difícil resolver Turnstile que el desafío 5s?

Turnstile suele ser más fácil ya que normalmente devuelve un único token. El desafío 5s requiere cookies, encabezados y consistencia en el proxy, lo que lo hace más complejo.

Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.

Máse

Cómo resolver Cloudflare al scraping web en 2026 | Guía paso a paso
Cómo resolver Cloudflare al hacer scraping web en 2026 | Guía paso a paso

Este artículo de blog explora técnicas efectivas para resolver estas defensas con la ayuda de CapSolver, una herramienta experta en resolver CAPTCHAs. Desde explicar los protocolos de seguridad de Cloudflare hasta proporcionar estrategias prácticas y ejemplos de código para evadir estas restricciones.

Cloudflare
Logo of CapSolver

Ethan Collins

09-Dec-2025

Cómo resolver el Captcha de Cloudflare Turnstile con NodeJS
Cómo resolver el Captcha de Cloudflare Turnstile con NodeJS

En este artículo, te mostraremos cómo resolver el captcha de cloudflare turnstile con NodeJS.

Cloudflare
Logo of CapSolver

Rajinder Singh

08-Dec-2025

Cloudflare 403 prohibido
Cómo resolver el error 403 Prohibido y 522/1020/1010/1015/1012

Cloudflare es un servicio de red de entrega de contenido (CDN) y seguridad ampliamente utilizado que ayuda a los sitios web a mitigar diversos tipos de amenazas, incluyendo ataques DDoS y bots abusivos...

Cloudflare
Logo of CapSolver

Lucas Mitchell

08-Dec-2025

Error de Cloudflare 1006, 1007, 1008
Error de Cloudflare 1006, 1007, 1008 Solución para resolver | Cómo arreglarlo

¿Tienes problemas con errores de Cloudflare 1006, 1007 o 1008? Aprende soluciones prácticas para resolver estos rechazos de acceso y mejorar tu experiencia de rastreo web.

Cloudflare
Logo of CapSolver

Ethan Collins

05-Dec-2025

Cómo identificar si la `action` es requerida para resolver Cloudflare Turnstile usando la extensión CapSolver
Cómo identificar si `action` es necesario para resolver Cloudflare Turnstile usando la extensión de CapSolver

Aprende a identificar la acción para resolver eficazmente el captcha de Cloudflare Turnstile. Sigue nuestra guía paso a paso sobre cómo usar las herramientas y técnicas de Capsolver.

Cloudflare
Logo of CapSolver

Adélia Cruz

05-Dec-2025

Cómo automatizar la solución de desafíos de Cloudflare en Selenium
Cómo automatizar la resolución de desafíos de Cloudflare en Selenium

Dominar la estrategia definitiva para resolver desafíos de Cloudflare en Selenium. Utiliza Undetected-Chromedriver, mimetismo conductual y la API de CapSolver para una automatización web confiable.

Cloudflare
Logo of CapSolver

Adélia Cruz

04-Dec-2025