¿Por qué el mismo script recibe una tanda interminable de imágenes un día y pasa con un solo clic al siguiente? En la mayoría de los casos la diferencia está en las cookies. reCAPTCHA lee y escribe cookies para calcular cuánto confía en cada visita: un navegador con cookies recientes de Google se enfrenta a desafíos mucho más suaves que uno que llega sin ninguna. Saber cuáles entran en juego y cuáles conservar es la palanca más barata para bajar la dificultad en tu automatización.
Cómo influyen las cookies en la dificultad del desafío
Google usa las cookies como una señal más dentro de su evaluación de riesgo. No deciden solas el resultado, pero pesan lo suficiente como para convertir un desafío imposible en un simple clic:
| Estado de las cookies | Dificultad del desafío | Motivo |
|---|---|---|
| Sesión iniciada en la cuenta de Google | Mínima | Señal de identidad fuerte |
| Cookies de Google presentes (sin iniciar sesión) | Baja-media | Refleja un historial de navegación normal |
| Navegador nuevo, sin cookies de Google | Media-alta | No hay historial para evaluar el riesgo |
| Cookies bloqueadas o eliminadas | Alta | Sospechoso: un navegador normal tiene cookies |
| Modo incógnito o privado | Alta | Sin identidad persistente |
El peso de las cookies en la puntuación de riesgo
El motor de riesgo de reCAPTCHA pondera mucho lo que encuentra en el navegador. En la práctica se ven tres escenarios:
- Mejor caso: el navegador tiene las cookies
SID,HSIDyNIDde una sesión de Google iniciada. → suele pasar con solo marcar la casilla. - Caso favorable: el navegador tiene
NIDy1P_JARde la navegación normal. → desafíos de imagen más sencillos o casilla directa. - Peor caso: sin cookies de Google y con una sesión nueva. → desafíos de imagen de varias rondas.
La conclusión es directa: cuanto más "humano" parezca el historial de cookies, menos fricción encontrarás.
Qué cookies utiliza reCAPTCHA
En una carga de reCAPTCHA entran en juego tres familias de cookies, cada una con un peso distinto:
- Las que pone Google en
.google.comy lee el iframe. - Las propias de reCAPTCHA, casi todas en localStorage.
- Las del sitio de destino, que sostienen tu sesión y el token CSRF.
Cookies del dominio de Google
Se establecen en .google.com y las lee el iframe de reCAPTCHA:
| Cookie | Dominio | Función | Duración |
|---|---|---|---|
NID |
.google.com |
Preferencias de Google e identificador único | 6 meses |
SID / HSID / SSID |
.google.com |
Sesión de la cuenta de Google (si has iniciado sesión) | 2 años |
APISID / SAPISID |
.google.com |
Autenticación de las APIs de Google | 2 años |
1P_JAR |
.google.com |
Personalización de anuncios de Google | 1 mes |
CONSENT |
.google.com |
Preferencia de consentimiento de cookies | 17 años |
Cookies propias de reCAPTCHA
| Cookie | Dominio | Función | Duración |
|---|---|---|---|
_GRECAPTCHA |
.google.com / .recaptcha.net |
Seguimiento de la sesión de reCAPTCHA | Sesión |
rc::a |
localStorage | Datos de análisis de riesgo | Persistente |
rc::b |
localStorage | Marca de tiempo | Sesión |
rc::c |
localStorage | Datos del desafío en curso | Sesión |
rc::d-<id> |
localStorage | Datos por widget | Sesión |
Cookies del sitio de destino
El sitio que aloja el reCAPTCHA también puede usar cookies para la sesión y para la protección CSRF:
| Tipo de cookie | Ejemplo | Relevancia |
|---|---|---|
| ID de sesión | PHPSESSID, session_id |
Vincula la resolución del CAPTCHA a la sesión del usuario |
| token CSRF | csrf_token, _token |
Necesario para enviar el formulario |
| Seguimiento propio | Específico del sitio | Puede influir en cuándo se activa el CAPTCHA |
Cómo manejar las cookies en la automatización
Piensa en un caso habitual en la región: un scraper que monitoriza precios en un marketplace tipo MercadoLibre o Amazon.es desde un servidor en la nube, respetando siempre los términos del servicio y la normativa de protección de datos aplicable. Ese servidor arranca sin historial, así que reCAPTCHA lo trata como sospechoso. La solución no es fuerza bruta, sino conservar el estado del navegador entre ejecuciones.
Con automatización del navegador (Playwright/Puppeteer)
La automatización del navegador gestiona las cookies de forma natural. Para conservarlas entre sesiones:
# Save cookies after session
cookies = page.context.cookies()
import json
with open("cookies.json", "w") as f:
json.dump(cookies, f)
# Restore cookies in next session
with open("cookies.json") as f:
cookies = json.load(f)
page.context.add_cookies(cookies)
Con CaptchaAI (resolución solo por API)
Cuando resuelves con CaptchaAI sin un navegador propio, las cookies no intervienen directamente en la resolución: CaptchaAI gestiona su propio entorno. Aun así, puede que quieras enviar cookies si el sitio de destino las necesita para mantener la continuidad de la sesión:
POST https://ocr.captchaai.com/in.php
key=YOUR_API_KEY
&method=userrecaptcha
&googlekey=SITE_KEY
&pageurl=https://staging.example.com/qa-login
&cookies=NID=12345;1P_JAR=2026-04-04-12
El parámetro cookies es opcional y transmite el contexto de cookies a CaptchaAI durante la resolución.
localStorage: el estado que no vive en las cookies
reCAPTCHA guarda datos de evaluación de riesgo en localStorage bajo claves con el prefijo rc:::
| Clave | Datos |
|---|---|
rc::a |
Carga útil de análisis de riesgo codificada |
rc::b |
Marca de tiempo del último desafío |
rc::c |
Datos de la sesión de desafío actual |
rc::d-<hash> |
Datos de instancia por widget |
Estas entradas permiten a reCAPTCHA mantener el estado entre cargas de página sin depender de cookies de terceros. En la automatización, conservar el localStorage puede reducir la dificultad del desafío:
# Save localStorage
storage = page.evaluate("() => JSON.stringify(localStorage)")
with open("localstorage.json", "w") as f:
f.write(storage)
# Restore localStorage
with open("localstorage.json") as f:
storage = f.read()
page.evaluate(f"Object.entries(JSON.parse('{storage}')).forEach(([k,v]) => localStorage.setItem(k,v))")
Restricciones de cookies entre dominios
reCAPTCHA se carga en un iframe desde google.com, y los navegadores modernos aplican políticas de cookies cada vez más estrictas:
| Política del navegador | Efecto sobre reCAPTCHA |
|---|---|
| SameSite=Lax (predeterminada) | Las cookies de Google no se envían en el iframe de reCAPTCHA por defecto |
| Bloqueo de cookies de terceros | reCAPTCHA recurre a recaptcha.net o al modo propio (first-party) |
| ITP (Safari) | Las cookies de Google caducan antes; los desafíos difíciles aparecen con más frecuencia |
Cómo lo compensa Google
Google mitiga las restricciones de cookies de terceros de varias formas:
- Usa
recaptcha.netcomo dominio alternativo. - Emplea
localStorage(entradasrc::*) para el estado del lado del cliente. - Ofrece opciones de carga de scripts propios (first-party) para clientes Enterprise.
Buenas prácticas de manejo de cookies
| Práctica | Beneficio |
|---|---|
| Reutiliza los perfiles del navegador entre ejecuciones | Acumula historial → desafíos más fáciles |
| No borres las cookies entre tareas | Mantiene la continuidad de la evaluación de riesgo de Google |
Usa recaptcha.net cuando google.com esté bloqueado |
Mismo servicio, otro dominio |
Conserva las entradas rc:: de localStorage |
Mantiene el estado de la sesión de reCAPTCHA |
| Visita servicios de Google de vez en cuando | Renueva la validez de las cookies |
Solución de problemas
| Problema | Causa | Solución |
|---|---|---|
| Siempre te salen desafíos de imagen difíciles | Sin cookies / perfil nuevo | Construye un perfil de navegador con cookies de Google |
| reCAPTCHA muestra el error "cookies required" | Cookies de terceros bloqueadas | Habilita las cookies para google.com o usa recaptcha.net |
| Token válido pero la sesión no coincide | No se conserva la cookie del sitio (PHPSESSID) |
Guarda y restaura todas las cookies, no solo las de Google |
| Bucle de desafíos: pide imágenes sin parar | localStorage borrado entre intentos | Conserva las entradas rc::* de localStorage |
Preguntas frecuentes
¿Qué cookie pesa más para que reCAPTCHA sea fácil?
Ninguna aislada, pero las cookies de sesión de Google (SID, HSID) marcan la mayor diferencia porque indican una cuenta con sesión iniciada. Sin esas, NID más un historial de navegación normal ya te acercan a la casilla directa.
¿Puedo compartir el mismo perfil de cookies entre varios workers?
Es mejor no hacerlo. Si muchos procesos usan las mismas cookies desde distintas IP a la vez, Google detecta la incoherencia y sube la dificultad. Mantén un perfil persistente por worker y consérvalo entre ejecuciones.
¿Sirve de algo enviar cookies a la API de CaptchaAI?
Solo cuando el sitio de destino las exige para la continuidad de la sesión. Para la resolución en sí no son necesarias: CaptchaAI resuelve con su propia infraestructura y el parámetro cookies es opcional.
¿El bloqueo de cookies de terceros rompe reCAPTCHA por completo?
No. reCAPTCHA recurre a recaptcha.net y a localStorage para mantener el estado, así que sigue funcionando; lo que suele ocurrir es que los desafíos se vuelven más difíciles y frecuentes.
¿Conservar el localStorage importa tanto como las cookies?
Cada vez más. Con el bloqueo de cookies de terceros, las entradas rc::* de localStorage cargan buena parte del estado de riesgo, así que borrarlas entre intentos reinicia esa señal y endurece los desafíos.
Artículos relacionados
- Resolver el callback de reCAPTCHA v2 con la API
- reCAPTCHA v2 y Turnstile en el mismo sitio
- El mecanismo de callback de reCAPTCHA v2
Próximos pasos
Mejora tus tasas de resolución de reCAPTCHA: consigue tu API key de CaptchaAI y gestiona las cookies con cabeza en tus flujos de automatización.