reCAPTCHA v2
y CapMonster Cloud

Resolución de captchas, integración en el sitio y pruebas de extremo a extremo.

Precios de la solución reCaptcha v2

CAPTCHA
Precio (USD)
$ 0.60
1000 tokens
¿Heredaste un sitio con una captcha u otra capa de protección pero sin acceso al código fuente? Entonces es normal preguntarse: ¿qué solución está instalada, está configurada correctamente y cómo se puede probar?

En este artículo hemos intentado responder a todas las preguntas clave. Para empezar a resolver la tarea, primero hay que determinar qué sistema de protección se está utilizando. Para ello, puedes consultar la lista de captchas y sistemas de protección antibot más populares, donde se muestran ejemplos visuales y señales clave que te ayudarán a identificar rápidamente con qué estás tratando.

Si descubres que tu sitio web utiliza reCaptcha v2, el siguiente paso será analizar con más detalle sus propiedades y su funcionamiento. En este mismo artículo también puedes consultar la guía de integración de reCaptcha v2 para comprender por completo cómo funciona en tu sitio. Esto te permitirá no solo entender la protección actual, sino también planificar correctamente su mantenimiento.

Qué es Google reCAPTCHA v2
Qué es Google reCAPTCHA v2
reCAPTCHA v2 es un sistema de protección de Google diseñado para bloquear el spam y otras acciones automatizadas que pueden dañar un sitio web. Ayuda a distinguir a los visitantes reales de los bots y mantiene tu recurso web estable y seguro.
Background
Ejemplos de reCaptcha v2
reCAPTCHA v2
reCAPTCHA v2
El captcha clásico con casilla donde el usuario debe confirmar que es humano. En algunos casos aparece una ventana con un reto adicional, por ejemplo elegir ciertas imágenes.
reCAPTCHA v2 Invisible
reCAPTCHA v2 Invisible
Una versión invisible de la captcha que valida automáticamente, sin interacción del usuario y sin necesidad de hacer clic en la casilla.
reCAPTCHA v2 Enterprise
reCAPTCHA v2 Enterprise
Versión empresarial con controles adicionales y funciones de seguridad.

Cómo resolver reCAPTCHA v2 con CapMonster Cloud

Al probar formularios que incluyen reCaptcha v2, normalmente debes verificar que la captcha funcione y esté integrada correctamente.

Puedes comprobar manualmente la captcha incrustada en tu sitio.

  • Abre la página del formulario y verifica que la captcha se renderice.
  • Intenta enviar el formulario sin resolverla: el servidor debe devolver un error.
  • Tras una solución correcta, el formulario debe enviarse sin inconvenientes.

Para la resolución automática puedes usar herramientas como CapMonster Cloud, que reciben los parámetros de la captcha, los procesan en sus servidores y devuelven un token listo para usar. Inserta ese token en el formulario para pasar la verificación sin interacción del usuario.

Trabajar con CapMonster Cloud mediante la API suele implicar los siguientes pasos:

Creación de la tareaCreación de la tarea
arrow
Enviar una solicitud APIEnviar una solicitud API
arrow
Recepción del resultadoRecepción del resultado
arrow
Colocar el token en la páginaColocar el token en la página
arrow
Resolución de reCAPTCHA v2 con bibliotecas listas
CapMonster Cloud ofrece SDK para trabajar cómodamente con Python, JavaScript (Node.js) y C#.
Python
JavaScript
C#
Resolver, insertar el token y enviar el formulario
Ejemplo en Node.js que cubre todo el ciclo de resolución de captcha en tu página. Posibles enfoques: usar peticiones HTTP para obtener el HTML y los parámetros de la captcha, enviar la respuesta y procesar el resultado; o recurrir a herramientas de automatización (por ejemplo, Playwright) para abrir la página, esperar la captcha, enviar parámetros (puedes probar con datos válidos o inválidos), obtener el resultado mediante el cliente de CapMonster Cloud, insertar el token en el formulario y ver el resultado.
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium


const { chromium } = require('playwright');
const { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request } = require('@zennolab_com/capmonstercloud-client');

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();

  const TARGET_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high';
  const WEBSITE_KEY = '6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd';
  const CMC_API_KEY = 'your_capmonster_cloud_api_key';

  const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CMC_API_KEY }));

  await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });

  // Resolución de la captcha
  const solution = await cmc.Solve(new RecaptchaV2Request({ websiteURL: TARGET_URL, websiteKey: WEBSITE_KEY }));
  const token = solution.solution.gRecaptchaResponse;

  // Inserta el token y envía el formulario (sustituye por el selector que necesites)
  await page.evaluate((t) => {
    const ta = document.querySelector('textarea#g-recaptcha-response');
    if (ta) ta.value = t;
    document.querySelector('form.formular')?.submit();
  }, token);

  console.log('¡Captcha resuelta y formulario enviado!');
})();
Cómo conectar reCAPTCHA v2 a tu sitio
Para entender cómo opera la captcha en tu sitio, conocer su lógica de validación y volver a conectarla o reconfigurarla, revisa esta sección. Describe el proceso de configuración de la protección para que puedas cubrir rápidamente cada detalle.

1. Ve a la página de la consola de administración de reCAPTCHA.

2. Registra un nuevo sitio.

Elige el tipo de captcha — reCAPTCHA v2 (casilla con desafíos o la variante invisible).

HowTo Connect image 1

3. Obtén dos claves:

  • Site key — clave pública (se usa en el frontend);
  • Secret key — clave privada (se usa en el servidor para la verificación).

HowTo Connect image 2

Abre la configuración para especificar los dominios que pueden usar reCAPTCHA o seleccionar el nivel de seguridad, del más simple al más confiable.

4. Ejemplo de código del lado del cliente. Formulario HTML con reCAPTCHA v2 (puedes pegar este fragmento en el cuerpo de la página):

Formulario HTML con reCAPTCHA v2Formulario HTML con reCAPTCHA v2
arrow

5. Valida la respuesta en el lado del servidor.

Ejemplo en PHPEjemplo en PHP
arrow
Background
Posibles errores y depuración
Bug Icon
Sitio o clave no válidos
La captcha no se carga o devuelve invalid-input-secret.
Bug Icon
Tiempo de espera excedido
El servidor no recibió la respuesta a tiempo. Aumenta el tiempo de espera.
Bug Icon
Token vacío
Se produjo un error al pasar el resultado a la página.
Bug Icon
Respuesta success=false
El token está caducado, se reutilizó o fue falsificado. Activa el registro de solicitudes y revisa el campo error-codes devuelto por Google.
Pruebas de resistencia de la protección
Después de la integración, asegúrate de que el sistema realmente proteja el sitio contra acciones automatizadas.
Consejos de seguridad y optimización
Guarde la <span class="font-bold">Secret Key</span> solo en el servidor; no la exponga en la parte del cliente.
Registre los códigos de error <span class="font-bold">(error-codes)</span> para entender por qué han fallado comprobaciones concretas.
Añada en la parte inferior del formulario enlaces a la <span class="font-bold">Política de privacidad</span> y a los <span class="font-bold">Términos de uso de Google</span>, tal y como exige la licencia.
Conclusión

Si has heredado un sitio web que ya tiene un captcha u otro sistema de protección instalado y no tienes acceso al código, no pasa nada. Identificar qué tecnología se está utilizando es bastante sencillo. Para comprobar que todo funciona correctamente, puedes usar el servicio de reconocimiento CapMonster Cloud en un entorno de pruebas aislado, para asegurarte de que el mecanismo de procesamiento de tokens y la lógica de verificación funcionan correctamente.

En el caso de reCaptcha v2, basta con detectar el sistema, analizar su comportamiento y confirmar que la protección funciona correctamente. En el artículo hemos mostrado cómo identificar reCaptcha v2 y dónde encontrar las instrucciones para su integración o reconfiguración, de modo que puedas mantener la protección con confianza y controlar su funcionamiento.

Conclusion

Preguntas frecuentes sobre reCAPTCHA v2

Para enviar una solicitud de resolución, haga POST con un JSON a https://api.capmonster.cloud/createTask:

{
  "clientKey": "API_KEY",
  "task": {
    "type": "RecaptchaV2Task",
    "websiteURL": "[target_page_URL_with_reCAPTCHA]",
    "websiteKey": "[reCAPTCHA_website_key]"
  }
}
  • clientKey — la clave API de su cuenta de CapMonster Cloud
  • task.type: establezca RecaptchaV2Task
  • task.websiteURL: URL de la página donde aparece el captcha
  • task.websiteKey: el sitekey público incrustado en el HTML de la página

Para los siguientes pasos, consulte la documentación de resolución de reCAPTCHA.

Envíe la tarea con una solicitud a https://api.capmonster.cloud/createTask con los parámetros descritos en la pregunta anterior.

Consulte https://api.capmonster.cloud/getTaskResult con su clientKey y taskId (devuelto en la respuesta de createTask).

Cuando el campo status sea ready, la respuesta incluirá la cadena gRecaptchaResponse — ese es su token resuelto.

Envíe el token al sitio de destino con uno de los siguientes métodos, según el tipo de reCAPTCHA v2 y la arquitectura del sitio:

  • Inyección DOM estándar: para integraciones típicas con checkbox, inyecte el token en el área de texto oculta (p. ej., document.getElementById("g-recaptcha-response").innerHTML = token;) usando page.evaluate() de Playwright (o su equivalente en Puppeteer/Selenium). Luego llame programáticamente a form.submit() o active el botón de envío.
  • Callback de JavaScript (reCAPTCHA invisible): si la página usa un captcha invisible con callback, identifique el nombre de la función en el atributo data-callback y ejecútela desde su script de automatización, pasando el token como argumento (p. ej., onVerifyCallback("TOKEN_STRING")).
  • Solicitud HTTP directa: para evitar el renderizado del navegador, intercepte la solicitud nativa de envío del sitio y envíe el token directamente al backend como parte de los datos del formulario (p. ej., g-recaptcha-response=TOKEN_STRING) con su cliente HTTP.

El servidor de destino extrae el token de su envío y lo valida contra el endpoint siteverify de Google.

CapMonster Cloud maneja ambos modos con la misma llamada API. Para el modo invisible, incluya el parámetro isInvisible: true en la solicitud createTask. Para confirmar correctamente la solución de reCAPTCHA, determine el método que usa el sitio para enviar el token. Estos métodos se describen en la pregunta anterior.

La causa más frecuente es un token ya utilizado o expirado — los tokens de reCAPTCHA v2 son de un solo uso y de corta duración, por lo que cualquier retraso o envío duplicado provocará esto. Comience registrando la respuesta HTTP sin procesar de https://www.google.com/recaptcha/api/siteverify — el array error-codes en esa respuesta es su principal señal de diagnóstico.

Otras dos causas habituales: invalid-input-secret significa que se pasó la clave secreta incorrecta en el backend, mientras que un campo g-recaptcha-response vacío en el servidor suele indicar que la inyección del token en el frontend falló silenciosamente antes de enviar el formulario.

Verifique también que la websiteURL que pasó a CapMonster Cloud coincida exactamente con el origen donde Google valida el token — una discrepancia produce un error de vinculación de dominio.

Para usuarios no técnicos: use la extensión de navegador CapMonster Cloud (Chrome/Firefox). Permite probar el comportamiento del captcha directamente en la página y observar el proceso de resolución en tiempo real. Instale la extensión, agregue su clave API y abra su página protegida con reCAPTCHA.

Para QA y DevOps: siga una prueba simple de tres pasos:

  1. Envíe el formulario sin resolver el captcha — debe devolver success: false.
  2. Envíe el formulario con el captcha resuelto — la solicitud debe pasar correctamente.
  3. Ejecute pruebas de carga (k6 o JMeter, 100+ RPS) y verifique que los tokens expirados o reutilizados se rechacen correctamente (p. ej., HTTP 403).

Importante: siteverify siempre devuelve HTTP 200 — los errores se determinan por el campo success, no por el código de estado HTTP.