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

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
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
{
"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
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
{
"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_clearanceque necesitarás crear
Ejemplo para resolver Cloudflare Challenge con Python
python
# -*- 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
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
{
"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
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
{
"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
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
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 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.

Ethan Collins
09-Dec-2025

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.

Rajinder Singh
08-Dec-2025

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...

Lucas Mitchell
08-Dec-2025

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.

Ethan Collins
05-Dec-2025

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.

Adélia Cruz
05-Dec-2025

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.

Adélia Cruz
04-Dec-2025


.