Comparativas

Resolución de CAPTCHA basada en tokens versus basada en cookies

¿Token o cookie? La respuesta rápida: usa un token para superar un CAPTCHA puntual al enviar un formulario, y una cookie para recorrer muchas páginas detrás de un mismo desafío de Cloudflare. La diferencia no la eliges tú: la marca el sitio de destino según cómo valide cada solicitud, y elegir mal cuesta resoluciones de más.

Aspecto Basado en token Basado en cookie
Qué obtienes Una cadena de token (más de 500 caracteres) Una cookie de navegador (qa_validation_cookie, entre otras)
Para qué sirve reCAPTCHA v2/v3, Cloudflare Turnstile Páginas de Cloudflare Challenge
Cómo se usa Se inyecta en el campo del formulario o en el cuerpo del POST Se envía en las solicitudes HTTP siguientes
Duración 60-120 segundos De 30 minutos a 24 horas
Reutilizable No (un solo uso) Sí (mientras dure la sesión)
Navegador Solo para extraer datos de la página Obligatorio para resolver (navegador completo)

Cómo decidir según tu caso

Antes de escribir código, mira qué protege el sitio y qué necesitas hacer después. Estas son las decisiones más habituales:

Escenario Enfoque Por qué
Formulario de login con reCAPTCHA Token Envías el token junto con los datos del formulario
Web scraping de un sitio tras Cloudflare Cookie Una resolución cubre muchas páginas
Envío de formulario con Turnstile Token Se inyecta en cf-turnstile-response
Acceso a una API detrás de Cloudflare Cookie Reutilizas la cookie en todas las llamadas
Envío de varios formularios Token (uno por envío) Cada formulario necesita un token nuevo
Extracción masiva del mismo dominio Cookie Resuelves una vez y extraes hasta que caduque

Un caso frecuente en la región: extraer precios de un marketplace protegido por Cloudflare. Con el enfoque basado en cookie, una resolución cubre miles de páginas del mismo dominio hasta que expira, en lugar de pagar una por página. Automatiza solo flujos que tengas autorización para usar y respeta los términos de servicio y la normativa de protección de datos aplicable (GDPR/LOPDGDD en España, LFPDPPP en México).

Resolución basada en token

Cómo funciona

  1. Extrae el sitekey de la página.
  2. Envía el sitekey y la URL de la página a CaptchaAI.
  3. Recibe la cadena de token.
  4. Inyecta el token en el campo oculto del formulario.
  5. Envía el formulario.

Qué CAPTCHA devuelven un token

CAPTCHA Campo del token
reCAPTCHA v2 g-recaptcha-response (textarea)
reCAPTCHA v3 g-recaptcha-response, con action (y enterprise=1 en sitekeys Enterprise)
Cloudflare Turnstile 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,
})

No hace falta navegador para el envío: inyectas el token directamente en la solicitud HTTP POST. A cambio, tiene vida corta —caduca en 60-120 segundos, así que resuélvelo y úsalo de inmediato— y es de un solo uso: cada envío necesita uno nuevo. La validación ocurre en el servidor, cuando el sitio manda el token a Google o Cloudflare.

Cómo funciona

  1. El sitio muestra una página de desafío (Cloudflare Challenge, JS Challenge).
  2. Un navegador resuelve el desafío (puede usar Turnstile internamente).
  3. El servidor emite una cookie de sesión (qa_validation_cookie).
  4. Todas las solicitudes posteriores con esa cookie se saltan el desafío.

Qué desafíos usan cookies

  • Páginas de Cloudflare Challenge: cookie qa_validation_cookie.
  • JS Challenge: el desafío de solo JavaScript de Cloudflare.
  • Algunos desafíos de WAF: distintos 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}")

Aquí el reparto de costos se invierte. Necesitas un navegador completo para resolver, pero la recompensa es una cookie de vida larga (de 30 minutos a 24 horas) reutilizable en muchas solicitudes. La contrapartida: queda atada a la IP y al User-Agent que la resolvieron, así que ambos deben mantenerse iguales o el desafío reaparece.

Enfoque híbrido

Algunos sitios combinan las dos técnicas: una página de Cloudflare Challenge (cookie) que protege un formulario con reCAPTCHA (token). Resuelves primero la cookie para entrar y después el token para enviar.

# 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 de costo y rendimiento

Característica Token Cookie
Costo de resolución Por cada envío de formulario Por sesión (se amortiza)
Tiempo de resolución 10-30 s por token 10-30 s una sola vez
Solicitudes por resolución 1 Muchas (hasta que caduque)
Flexibilidad de IP El token funciona desde cualquier IP La cookie queda atada a la IP que la resolvió
Navegador para usarla No hace falta No hace falta (basta la cookie)
Riesgo de caducidad 60-120 s De 30 minutos a 24 horas

Preguntas frecuentes

¿Necesito un navegador para resolver con tokens?

No. El enfoque basado en token funciona con simples solicitudes HTTP: envías el sitekey a la API, recibes el token y lo inyectas en el POST. El navegador solo hace falta para el enfoque basado en cookie.

Casi siempre por un desajuste de IP o de User-Agent. La cookie queda atada a la IP y al User-Agent que resolvieron el desafío; si cambias de red o de cabecera, el sitio vuelve a mostrarlo aunque la cookie no haya expirado.

¿Puedo reutilizar el mismo token en varios formularios?

No. Cada token es de un solo uso y caduca en 60-120 segundos. Para cada envío necesitas resolver uno nuevo; por eso, en flujos con muchos formularios, el costo crece con el número de envíos.

¿CaptchaAI cubre tanto tokens como cookies?

Sí. Los CAPTCHA basados en token (reCAPTCHA v2/v3, Turnstile) devuelven la cadena lista para inyectar. Para las páginas de Cloudflare Challenge, usas el solver de Turnstile para obtener el token y luego extraes la cookie resultante.

Resuelve CAPTCHA con CaptchaAI

Obtén tu API key en captchaai.com y elige el enfoque —token o cookie— según cómo valide cada sitio.

Guías relacionadas

Los comentarios están deshabilitados para este artículo.