Cómo resolver Captcha en CrewAI con integración de CapSolver

Adélia Cruz
Neural Network Developer
23-Dec-2025
TL;DR: Los flujos de trabajo de CrewAI suelen encontrarse con CAPTCHA; integrar CapSolver permite a los scripts automatizados resolverlos de manera eficiente.

Introducción
Al automatizar tareas con CrewAI, como el scraping de web o la navegación, los CAPTCHAs pueden bloquear fácilmente su flujo de trabajo. Estos desafíos son comunes al acceder a sitios web protegidos y pueden interrumpir incluso scripts de automatización bien diseñados.
CapSolver ofrece una forma confiable de manejar los CAPTCHAs, permitiendo que CrewAI continúe con sus tareas sin intervención manual. Al integrar CapSolver, puede optimizar la navegación automatizada y la recopilación de datos manteniéndose en cumplimiento con las protecciones de los sitios web.
¿Qué es CrewAI?
CrewAI es un framework de Python ligero y rápido para construir sistemas de agentes de IA autónomos. Creado desde cero, completamente independiente de LangChain u otros frameworks de agentes, CrewAI ofrece tanto facilidad de uso a alto nivel como capacidades de personalización granular.
Características clave de CrewAI
- Colaboración de múltiples agentes: Cree equipos de agentes de IA que trabajen juntos de forma autónoma con toma de decisiones natural y delegación dinámica de tareas
- Flujos de trabajo basados en eventos (Flows): Control preciso de la ejecución con gestión de caminos granulares, consistencia de estado y ramificación condicional
- Diseño independiente: Sin dependencias de marcos externos, construido para velocidad con demandas mínimas de recursos
- Listo para producción: Diseñado con estándares de fiabilidad y escalabilidad empresarial
- Comunidad extensa: Más de 100.000 desarrolladores certificados a través de capacitación comunitaria
Arquitectura principal
CrewAI opera en dos paradigmas complementarios:
| Componente | Descripción |
|---|---|
| Crews | Equipos de agentes que colaboran de forma autónoma, permitiendo resolver problemas de forma flexible con roles especializados |
| Flows | Flujos de trabajo basados en eventos que ofrecen control preciso de la ejecución para lógica de negocio compleja |
¿Qué es CapSolver?
CapSolver es un servicio líder para resolver CAPTCHAs que proporciona soluciones impulsadas por IA para evitar diversos desafíos de CAPTCHA. Con soporte para múltiples tipos de CAPTCHA y tiempos de respuesta rápidos, CapSolver se integra sin problemas en flujos automatizados.
Tipos de CAPTCHA soportados
- reCAPTCHA v2 (Imagen & Invisible)
- reCAPTCHA v3
- Cloudflare Turnstile
- Cloudflare Challenge (5s)
- AWS WAF
- Y muchos más...
¿Por qué integrar CapSolver con CrewAI?
Al construir agentes de CrewAI que interactúan con sitios web, ya sea para recopilar datos, pruebas automatizadas o agregación de contenido, los desafíos de CAPTCHA se convierten en un obstáculo significativo. Aquí radica la importancia de la integración:
- Flujos de trabajo de agentes sin interrupciones: Los agentes pueden completar sus tareas sin intervención manual
- Automatización escalable: Manejar múltiples desafíos de CAPTCHA en operaciones concurrentes de agentes
- Costo efectivo: Pagar solo por CAPTCHAs resueltos con éxito
- Altas tasas de éxito: Precisión líder en la industria para todos los tipos de CAPTCHA soportados
Instalación
Primero, instale los paquetes requeridos:
bash
pip install crewai
pip install 'crewai[tools]'
pip install requests
Creando una herramienta personalizada de CapSolver para CrewAI
CrewAI le permite crear herramientas personalizadas que los agentes pueden usar para realizar sus tareas. Aquí le mostramos cómo crear una herramienta de CapSolver para manejar desafíos de CAPTCHA:
Implementación básica de la herramienta de CapSolver
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SU_CLAVE_API_DE_CAPSOLVER"
class CaptchaSolverInput(BaseModel):
"""Esquema de entrada para la herramienta CaptchaSolver."""
website_url: str = Field(..., description="La URL del sitio web con CAPTCHA")
website_key: str = Field(..., description="La clave del sitio del CAPTCHA")
captcha_type: str = Field(default="ReCaptchaV2TaskProxyLess", description="Tipo de CAPTCHA a resolver")
class CaptchaSolverTool(BaseTool):
name: str = "captcha_solver"
description: str = "Resuelve desafíos de CAPTCHA usando la API de CapSolver. Soporta reCAPTCHA v2, v3, Turnstile, entre otros."
args_schema: Type[BaseModel] = CaptchaSolverInput
def _run(self, website_url: str, website_key: str, captcha_type: str = "ReCaptchaV2TaskProxyLess") -> str:
# Crear tarea
create_task_url = "https://api.capsolver.com/createTask"
task_payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": captcha_type,
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post(create_task_url, json=task_payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error al crear la tarea: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Consultar resultado
get_result_url = "https://api.capsolver.com/getTaskResult"
for _ in range(60): # Máximo 60 intentos
time.sleep(2)
result_payload = {
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
response = requests.post(get_result_url, json=result_payload)
result = response.json()
if result.get("status") == "ready":
solution = result.get("solution", {})
return solution.get("gRecaptchaResponse") or solution.get("token")
elif result.get("status") == "failed":
return f"Tarea fallida: {result.get('errorDescription')}"
return "Tiempo de espera agotado para la solución del CAPTCHA"
Resolviendo diferentes tipos de CAPTCHA
Solucionador de reCAPTCHA v2
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SU_CLAVE_API_DE_CAPSOLVER"
class ReCaptchaV2Input(BaseModel):
"""Esquema de entrada para el solucionador de reCAPTCHA v2."""
website_url: str = Field(..., description="La URL del sitio web con reCAPTCHA v2")
website_key: str = Field(..., description="La clave del sitio de reCAPTCHA")
class ReCaptchaV2Tool(BaseTool):
name: str = "recaptcha_v2_solver"
description: str = "Resuelve desafíos de reCAPTCHA v2 usando CapSolver"
args_schema: Type[BaseModel] = ReCaptchaV2Input
def _run(self, website_url: str, website_key: str) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
return self._solve_captcha(payload)
def _solve_captcha(self, payload: dict) -> str:
# Crear tarea
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Consultar resultado
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Falló: {result.get('errorDescription')}"
return "Tiempo de espera agotado para la solución"
Solucionador de reCAPTCHA v3
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SU_CLAVE_API_DE_CAPSOLVER"
class ReCaptchaV3Input(BaseModel):
"""Esquema de entrada para el solucionador de reCAPTCHA v3."""
website_url: str = Field(..., description="La URL del sitio web con reCAPTCHA v3")
website_key: str = Field(..., description="La clave del sitio de reCAPTCHA")
page_action: str = Field(default="submit", description="El parámetro de acción para reCAPTCHA v3")
class ReCaptchaV3Tool(BaseTool):
name: str = "recaptcha_v3_solver"
description: str = "Resuelve desafíos de reCAPTCHA v3 con verificación basada en puntuación"
args_schema: Type[BaseModel] = ReCaptchaV3Input
def _run(
self,
website_url: str,
website_key: str,
page_action: str = "submit"
) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key,
"pageAction": page_action
}
}
# Crear tarea
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Consultar resultado
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Falló: {result.get('errorDescription')}"
return "Tiempo de espera agotado para la solución"
Solucionador de Cloudflare Turnstile
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SU_CLAVE_API_DE_CAPSOLVER"
class TurnstileInput(BaseModel):
"""Esquema de entrada para el solucionador de Turnstile."""
website_url: str = Field(..., description="La URL del sitio web con Turnstile")
website_key: str = Field(..., description="La clave del sitio del widget Turnstile")
class TurnstileTool(BaseTool):
name: str = "turnstile_solver"
description: str = "Resuelve desafíos de Cloudflare Turnstile"
args_schema: Type[BaseModel] = TurnstileInput
def _run(self, website_url: str, website_key: str) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
# Crear tarea
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Consultar resultado
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("status") == "failed":
return f"Falló: {result.get('errorDescription')}"
return "Tiempo de espera agotado para la solución"
Solucionador de Cloudflare Challenge (5s)
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SU_CLAVE_API_DE_CAPSOLVER"
class CloudflareChallengeInput(BaseModel):
"""Esquema de entrada para el solucionador de Cloudflare Challenge."""
website_url: str = Field(..., description="La URL de la página protegida")
proxy: str = Field(..., description="Proxy en formato: http://usuario:contraseña@ip:puerto")
class CloudflareChallengeTool(BaseTool):
name: str = "cloudflare_challenge_solver"
description: str = "Resuelve páginas de desafío de Cloudflare de 5 segundos"
args_schema: Type[BaseModel] = CloudflareChallengeInput
def _run(self, website_url: str, proxy: str) -> dict:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiCloudflareTask",
"websiteURL": website_url,
"proxy": proxy
}
}
# Crear tarea
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Consultar resultado
for attempt in range(60):
time.sleep(3)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return {
"cookies": result["solution"]["cookies"],
"user_agent": result["solution"]["userAgent"]
}
if result.get("status") == "failed":
return f"Falló: {result.get('errorDescription')}"
return "Tiempo de espera agotado para la solución"
Cómo enviar tokens de CAPTCHA
Cada tipo de CAPTCHA requiere un método de envío diferente:
reCAPTCHA v2/v3 - Inyección de token
Para reCAPTCHA, inyecte el token en el área de texto oculta y envíe el formulario:
python
from selenium import webdriver
from selenium.webdriver.common.by import By
def submit_recaptcha_token(driver, token: str):
"""Inyectar token de reCAPTCHA y enviar"""
# Hacer visible el área de texto oculta y establecer el token
recaptcha_response = driver.find_element(By.ID, "g-recaptcha-response")
driver.execute_script("arguments[0].style.display = 'block';", recaptcha_response)
recaptcha_response.clear()
recaptcha_response.send_keys(token)
# Enviar el formulario
form = driver.find_element(By.TAG_NAME, "form")
form.submit()
Turnstile - Inyección de token
Para Turnstile, establezca el token en el campo de entrada oculto:
python
def submit_turnstile_token(driver, token: str):
"""Inyectar token de Turnstile y enviar"""
# Establecer token en el campo de entrada oculto
turnstile_input = driver.find_element(By.NAME, "cf-turnstile-response")
driver.execute_script("arguments[0].value = arguments[1];", turnstile_input, token)
# Enviar el formulario
form = driver.find_element(By.TAG_NAME, "form")
form.submit()
Cloudflare Challenge - Usar cookies
Para Cloudflare Challenge (5s), CapSolver devuelve cookies y user-agent en lugar de un token. Úselos en sus solicitudes:
python
import requests
def accessar_pagina_protegida_cloudflare(url: str, cf_solution: dict):
"""
Utilice la solución de desafío de Cloudflare para acceder a la página protegida.
cf_solution contiene 'cookies' y 'user_agent' de CapSolver.
"""
# Crear sesión con las cookies resueltas
session = requests.Session()
# Establecer las cookies de la solución de CapSolver
for cookie in cf_solution["cookies"]:
session.cookies.set(cookie["name"], cookie["value"])
# Establecer el agente de usuario que se usó para resolver
headers = {
"User-Agent": cf_solution["user_agent"]
}
# Ahora puedes acceder a la página protegida
response = session.get(url, headers=headers)
return response.text
### Ejemplo completo de raspado
```python
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
CLAVE_API_CAPSOLVER = "TU_CLAVE_API_CAPSOLVER"
def resolver_recaptcha(url_sitio: str, clave_sitio: str) -> str:
"""Obtener token reCAPTCHA de CapSolver"""
payload = {
"clientKey": CLAVE_API_CAPSOLVER,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": url_sitio,
"websiteKey": clave_sitio
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
resultado = response.json()
if resultado.get("errorId") != 0:
raise Exception(f"Error: {resultado.get('errorDescription')}")
id_tarea = resultado.get("taskId")
for _ in range(60):
time.sleep(2)
resultado = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CLAVE_API_CAPSOLVER, "taskId": id_tarea}
).json()
if resultado.get("status") == "ready":
return resultado["solution"]["gRecaptchaResponse"]
if resultado.get("status") == "failed":
raise Exception(f"Falló: {resultado.get('errorDescription')}")
raise Exception("Tiempo de espera agotado")
def raspado_con_recaptcha(url_objetivo: str, clave_sitio: str):
"""Flujo completo: resolver CAPTCHA → enviar → raspado"""
driver = webdriver.Chrome()
driver.get(url_objetivo)
try:
# 1. Resolver CAPTCHA
token = resolver_recaptcha(url_objetivo, clave_sitio)
# 2. Inyectar token
campo_recaptcha = driver.find_element(By.ID, "g-recaptcha-response")
driver.execute_script("arguments[0].style.display = 'block';", campo_recaptcha)
campo_recaptcha.clear()
campo_recaptcha.send_keys(token)
# 3. Enviar formulario
driver.find_element(By.TAG_NAME, "form").submit()
# 4. Raspado de contenido
time.sleep(3) # Esperar a que se cargue la página
return driver.page_source
finally:
driver.quit()
Uso de la extensión del navegador de CapSolver
Para escenarios que requieren automatización de navegadores dentro de CrewAI, puede utilizar la extensión de CapSolver:
-
Descargar la extensión: Obtenga la extensión de CapSolver desde capsolver.com
-
Configurar con Selenium/Playwright: Cargue la extensión en su herramienta de automatización de navegadores
-
Modo de resolución automática: La extensión detecta y resuelve automáticamente los CAPTCHAs
python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Configurar Chrome con la extensión de CapSolver
opciones_chrome = Options()
opciones_chrome.add_extension("ruta/a/capsolver-extensión.crx")
driver = webdriver.Chrome(options=opciones_chrome)
# La extensión manejará automáticamente los CAPTCHAs
driver.get("https://ejemplo.com/pagina-protegida")
Prácticas recomendadas
1. Manejo de errores
python
def resolver_con_reintento(self, payload: dict, max_reintentos: int = 3) -> str:
for intento in range(max_reintentos):
try:
resultado = self._resolver_captcha(payload)
if resultado:
return resultado
except Exception as e:
if intento == max_reintentos - 1:
raise
time.sleep(2 ** intento) # Retroalimentación exponencial
2. Gestión de balances
python
def verificar_balance() -> float:
response = requests.post(
"https://api.capsolver.com/getBalance",
json={"clientKey": CLAVE_API_CAPSOLVER}
)
return response.json().get("balance", 0)
3. Almacenamiento en caché de soluciones
Para acceso repetido a las mismas páginas, almacene en caché los tokens CAPTCHA cuando sea apropiado:
python
from functools import lru_cache
from datetime import datetime, timedelta
cache_captcha = {}
def obtener_token_caché(url_sitio: str, clave_sitio: str) -> str:
clave_cache = f"{url_sitio}:{clave_sitio}"
if clave_cache in cache_captcha:
token, timestamp = cache_captcha[clave_cache]
if datetime.now() - timestamp < timedelta(minutes=2):
return token
# Resolver nuevo CAPTCHA
nuevo_token = resolver_captcha(url_sitio, clave_sitio)
cache_captcha[clave_cache] = (nuevo_token, datetime.now())
return nuevo_token
Conclusión
La integración de CapSolver con CrewAI desbloquea el potencial completo de los agentes de IA autónomos para tareas basadas en la web. Al combinar el poderoso orquestador de agentes de CrewAI con las capacidades líderes en la industria de CapSolver para resolver CAPTCHAs, los desarrolladores pueden construir soluciones de automatización robustas que manejen incluso los mecanismos más desafiantes de protección web.
Ya sea que esté construyendo pipelines de extracción de datos, marcos de pruebas automatizadas o agentes web inteligentes, la combinación CrewAI + CapSolver proporciona la confiabilidad y escalabilidad necesarias para entornos de producción.
¿Listo para comenzar? Regístrese en CapSolver y use el código de bonificación CREWAI para obtener un 6% adicional en cada recarga!

Preguntas frecuentes
¿Qué es CrewAI?
CrewAI es un marco de Python ágil y rápido para construir sistemas de agentes de IA autónomos. Permite a los desarrolladores crear equipos de agentes de IA que colaboran para lograr tareas complejas, con soporte tanto para toma de decisiones autónoma como para control preciso del flujo de trabajo.
¿Cómo se integra CapSolver con CrewAI?
CapSolver se integra con CrewAI mediante herramientas personalizadas. Crea una herramienta que envuelva la API de CapSolver, permitiendo que tus agentes de IA resuelvan automáticamente los desafíos de CAPTCHA cuando los encuentren durante las operaciones web.
¿Qué tipos de CAPTCHAs puede resolver CapSolver?
CapSolver admite una amplia gama de tipos de CAPTCHA, incluyendo reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, AWS WAF, GeeTest y muchos más.
¿Cuánto cuesta CapSolver?
CapSolver ofrece precios competitivos según el tipo y volumen de CAPTCHAs resueltos. Visite capsolver.com para conocer los detalles de precios actuales. Use el código CREWAI para obtener un 6% de bonificación en su primer recarga.
¿Puedo usar CapSolver con otros marcos de Python?
Sí. CapSolver proporciona una API REST que se puede integrar con cualquier marco de Python, incluyendo Scrapy, Selenium, Playwright y más.
¿Es gratuito CrewAI?
Sí, CrewAI es de código abierto y se distribuye bajo la licencia MIT. El marco es gratuito para usar, aunque es posible que incurra en costos por llamadas a la API de modelos de lenguaje (como OpenAI) y servicios de resolución de CAPTCHA como CapSolver.
¿Cómo encuentro la clave del CAPTCHA del sitio?
La clave del sitio generalmente se encuentra en la fuente HTML de la página. Busque:
- reCAPTCHA: atributo
data-sitekeyo llamada agrecaptcha.render() - : atributo
data-sitekey - Turnstile: atributo
data-sitekeyen el widget de Turnstile
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

Maestro MCP: Potencia la inteligencia artificial en 2026
El Protocolo de Contexto de Modelo (MCP) es el futuro de la integración de IA. Aprende cómo el MCP estandariza la comunicación entre herramientas de IA, impulsa la automatización empresarial y mejora la inteligencia de la IA en 2026.

Aloísio Vítor
24-Dec-2025

Mejores Servicios de Empresa de Proxy: Deberías Saber
Este blog ofrece una vista detallada de cinco proveedores destacados de servicios de proxy: ProxyScrape.com, Proxies.gg, Asocks.com, MetaProxies, RushProxy y Ake.net. Cada sección del blog se enfoca en las ofertas únicas, características, precios y beneficios de los servicios individuales, destacando sus fortalezas y especialidades. Desde proxies residenciales y móviles hasta opciones de centros de datos, el blog ofrece una visión general completa del amplio panorama de proxies. Ya sea que sea una empresa que busca herramientas de análisis de mercado, un individuo que busca privacidad en línea o un desarrollador que necesita soluciones de raspado web, este blog sirve como una guía valiosa para comprender y elegir el servicio de proxy adecuado para sus necesidades.

Ethan Collins
24-Dec-2025

Cómo resolver Captcha en Crawlee con la integración de CapSolver
Una guía práctica para resolver reCAPTCHA y Turnstile en Crawlee usando CapSolver para scraping estable en Node.js.

Adélia Cruz
24-Dec-2025

Herramientas de raspado de web - Explicado
Descubre las mejores herramientas de scraping web para una extracción eficiente de datos de sitios web, adecuadas tanto para programadores como para no programadores, en nuestro guía completa.

Rajinder Singh
23-Dec-2025

Cómo resolver Captcha en CrewAI con integración de CapSolver
La integración de CrewAI con CapSolver habilita un manejo fluido de CAPTCHA para reCAPTCHA, Cloudflare Turnstile, AWS WAF y más, mejorando las tareas web automatizadas.

Adélia Cruz
23-Dec-2025

Cómo resolver MTCaptcha con Python
En este artículo, te mostraremos cómo resolver MTCaptcha con Python

Adélia Cruz
18-Dec-2025

