Las soluciones CAPTCHA vienen en dos formas: tokens que se inyectan en los envíos de formularios y cookies que otorgan acceso a nivel de sesión. Elegir el enfoque correcto depende del CAPTCHA al que te enfrentes y de cómo lo valide el sitio de destino.
De un vistazo
| Aspecto | Basado en tokens | Basado en cookies |
|---|---|---|
| Salida | Un token de cadena (más de 500 caracteres) | Una cookie del navegador (qa_validation_cookie, etc.) |
| Utilizado para | reCAPTCHA v2/v3, hCaptcha, Torniquete | Páginas Cloudflare Challenge |
| como se usa | Inyectado en el campo del formulario o en el cuerpo POST | Enviado con solicitudes HTTP posteriores |
| Toda la vida | 60-120 segundos | 30 minutos a 24 horas |
| Reutilizable | No (uso único) | Sí (durante la duración de la sesión) |
| Se requiere navegador | Sólo para extracción | Para resolver (se necesita un navegador completo) |
Resolución basada en tokens
como funciona
- Extraiga la clave del sitio de la página.
- Envíe la clave del sitio + la URL de la página a CaptchaAI
- Recibir una cadena de token
- Inyecte el token en el campo del formulario oculto
- Envía el formulario
¿Qué CAPTCHA utilizan tokens?
- reCAPTCHA v2: El token va al área de texto
g-recaptcha-response - reCAPTCHA v3: Mismo campo, pero también necesita
action(yenterprise=1para sitekeys Enterprise) - hCaptcha: El token entra en
h-captcha-response - Torniquete: La ficha entra en
cf-turnstile-response
Implementación
import requests
import time
API_KEY = "YOUR_API_KEY"
# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAAAPBMR...",
"pageurl": "https://staging.example.com/qa-login",
"json": "1",
}).json()
task_id = resp["request"]
# 2. Poll
token = None
for _ in range(24):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": "1"
}).json()
if result["status"] == 1:
token = result["request"]
break
# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
"email": "user@example.com",
"password": "password",
"g-recaptcha-response": token,
})
Características clave
- No se necesita navegador para el envío: puede inyectar el token directamente en una solicitud HTTP POST
- De corta duración: los tokens caducan en 60-120 segundos: resuélvelos y úsalos inmediatamente.
- Uso único: Cada token funciona una vez; resolver nuevamente para cada envío de formulario
- Validación del lado del servidor: el sitio de destino envía el token a Google/Cloudflare/hCaptcha para su verificación.
Resolución basada en cookies
como funciona
- Se publica una página de desafío (Cloudflare Challenge, JS Challenge)
- Un navegador resuelve el desafío (puede involucrar a Turnstile internamente)
- El servidor establece una cookie de sesión (
qa_validation_cookie) - Todas las solicitudes posteriores con esa cookie omiten el desafío.
¿Qué CAPTCHA utilizan cookies?
- Páginas Cloudflare Challenge: cookie
qa_validation_cookie - JS Challenge: desafío exclusivo de JavaScript de Cloudflare
- Algunos desafíos de WAF: varios firewalls de aplicaciones web
Implementación
from selenium import webdriver
import requests
import time
# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")
# Wait for challenge to complete (manually or con CaptchaAI)
time.sleep(10) # O valida el token con CaptchaAI en una prueba propia
# 2. Extract cookies from browser
cookies = driver.get_cookies()
qa_validation_cookie = next(
(c for c in cookies if c["name"] == "qa_validation_cookie"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()
# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})
for cookie in cookies:
session.cookies.set(cookie["name"], cookie["value"])
# All requests now pass the challenge
for page in range(1, 50):
resp = session.get(f"https://example.com/api/data?page={page}")
print(f"Page {page}: {resp.status_code}")
Características clave
- Se requiere un navegador para resolverlo: el desafío necesita un entorno de navegador completo
- De larga duración: las cookies duran entre 30 minutos y 24 horas.
- Reutilizable: una solución otorga acceso a muchas solicitudes
- Ligada a IP: la cookie está vinculada a la IP que resolvió el desafío.
- Limitado a UA: El User-Agent debe coincidir con el utilizado durante la resolución
Cuando usar cual
| Escenario | Enfoque | ¿Por qué? |
|---|---|---|
| Formulario de inicio de sesión con reCAPTCHA | ficha | Enviar token con datos del formulario |
| Eliminación de un sitio protegido por Cloudflare | galleta | Una solución, muchas solicitudes de página |
| Envío de formularios con Turnstile | ficha | Inyectar en cf-turnstile-response |
| Accediendo a una API detrás de Cloudflare | galleta | Reutilizar cookie para todas las llamadas API |
| Enviar varios formularios | Ficha (cada vez) | Cada formulario necesita un token nuevo |
| Eliminación masiva del mismo dominio | galleta | Resolver una vez, raspar hasta que caduque la galleta |
Enfoque híbrido
Algunos sitios utilizan ambos: una página Cloudflare Challenge (cookie) que protege un formulario que tiene reCAPTCHA (token).
# Step 1: Get past Cloudflare (cookie)
session = get_qa_validation_cookie_session("https://example.com")
# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)
# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")
# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
"data": "value",
"g-recaptcha-response": token,
})
Resumen comparativo
| Característica | ficha | galleta |
|---|---|---|
| Resolver costo | Por envío de formulario | Por sesión (amortizado) |
| resolver el tiempo | 10-30 por ficha | 10-30s una vez |
| Solicitudes por resolución | 1 | Muchos (hasta caducidad) |
| Flexibilidad de propiedad intelectual | El token funciona desde cualquier IP | Cookie vinculada a la resolución de IP |
| Navegador para usar | No es necesario | No es necesario (solo la galleta) |
| Riesgo de caducidad | 60-120s | 30 minutos - 24 horas |
Preguntas frecuentes
¿Puedo convertir un CAPTCHA basado en token a uno basado en cookies?
No. El enfoque depende de cómo se valida el sitio. reCAPTCHA siempre usa tokens; Cloudflare Challenge siempre utiliza cookies.
¿Cuál es más barato para el raspado de gran volumen?
Las basadas en cookies son mucho más baratas cuando están disponibles. Una solución cubre miles de solicitudes. Basado en token requiere una resolución por envío de formulario.
¿CaptchaAI maneja ambos?
Sí. Los CAPTCHA basados en tokens devuelven una cadena de tokens. Para las páginas Cloudflare Challenge, puede utilizar el solucionador Turnstile para obtener el token necesario para completar el desafío y luego extraer la cookie resultante.
Resolver CAPTCHA con CaptchaAI
Obtenga su clave API encaptchaai.com.
Guías relacionadas
- Cloudflare Challenge qa_validation_cookie Guía de cookies
- Extracción de parámetros reCAPTCHA
- Torniquete vs hCaptcha vs reCAPTCHA