GeeTest CAPTCHA v3
y CapMonster Cloud

Resolución de captcha, instalación en el sitio y pruebas.

Precios de la solución GeeTest CAPTCHA v3

CAPTCHA
Precio (USD)
$ 1.20
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 GeeTest CAPTCHA v3, 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 GeeTest CAPTCHA v3 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 GeeTest CAPTCHA v3
Qué es GeeTest CAPTCHA v3

GeeTest CAPTCHA v3 es un sistema de protección de sitios web frente a acciones automatizadas que pueden dañar el recurso. Permite distinguir a los usuarios reales de los bots, garantizando la seguridad y el funcionamiento estable del sitio web.

Background
Ejemplos de GeeTest CAPTCHA v3
Intelligent mode
Intelligent mode
La verificación del usuario se realiza principalmente en función de su comportamiento e interacción con el sitio, sin necesidad de resolver retos.
Slide CAPTCHA
Slide CAPTCHA
Un deslizador que hay que mover para completar un rompecabezas o alinear un elemento de la imagen.
Icon CAPTCHA
Icon CAPTCHA
Selección de imágenes en el orden indicado.
Space CAPTCHA
Space CAPTCHA
Mover una figura a la posición correcta sobre la imagen.

Cómo resolver GeeTest CAPTCHA v3 con CapMonster Cloud

Al probar formularios que incluyen GeeTest CAPTCHA v3, 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
Reconocimiento de GeeTest CAPTCHA v3 mediante bibliotecas listas
El servicio CapMonster Cloud proporciona bibliotecas listas para trabajar cómodamente en Python, JavaScript (Node.js) y C#.
Python
JavaScript
C#
Resolución, inserción del token y envío del formulario
Ejemplo en Node.js para un ciclo completo de reconocimiento de la captcha en tu página web. Posibles enfoques: usar solicitudes HTTP para obtener el HTML y los parámetros de la captcha, enviar la respuesta y procesar el resultado; o, con ayuda de herramientas de automatización (por ejemplo, Playwright), abrir la página, esperar a que aparezca la captcha, enviar los parámetros (para pruebas puedes enviar tanto datos correctos como incorrectos), obtener la solución a través del cliente de CapMonster Cloud, insertar el token en el formulario y ver el resultado.
python
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = 'your_capmonster_cloud_api_key';
const DEMO_PAGE = 'https://example.com';

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

  console.log('Abrimos la página...');
  await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });

  console.log('Obtenemos los parámetros de la captcha...');
  const init = await page.evaluate(async () => {
    // Enviamos una solicitud al servidor para obtener los parámetros init-params de GeeTest; sustitúyelo por tu valor
    const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);  
    return r.json();
  });
  console.log('Init params:', init);

  console.log('Creamos una tarea para CapMonster Cloud...');
  const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
  const solRaw = await cmc.Solve(new GeeTestRequest({ websiteURL: DEMO_PAGE, gt: init.gt, challenge: init.challenge }));
  const sol = solRaw.solution || solRaw;
  console.log('Solución de la captcha:', sol);

  console.log('Insertamos la solución en los campos ocultos...');
  await page.evaluate(s => {
    ['challenge','validate','seccode'].forEach(n => {
      const el = document.querySelector(`input[name="geetest_${n}"]`);
      if(el) el.value = s[n];
    });
  }, sol);

  await page.click('button[data-action="test_action"]'); // sustituye por tu valor
  console.log('Enviamos la solicitud de verificación (verify) al servidor...');
  const result = await page.evaluate(async () => {
    const payload = {
      geetest_challenge: document.querySelector('input[name="geetest_challenge"]')?.value,
      geetest_validate: document.querySelector('input[name="geetest_validate"]')?.value,
      geetest_seccode: document.querySelector('input[name="geetest_seccode"]')?.value
    };
    // sustituye por tu valor
    const r = await fetch('/api/v1/example/gee-test/verify', { 
      method:'POST', 
      headers:{'Content-Type':'application/json'}, 
      body: JSON.stringify(payload) 
    });
    return r.json();
  });

  console.log('Resultado de la verificación de la captcha:', result);

  await page.waitForTimeout(3000);
  await browser.close();
})();
Cómo conectar GeeTest CAPTCHA v3 a tu sitio
Para orientarte con confianza en el funcionamiento de la captcha en tu sitio, entender la lógica de su verificación y poder reconectarla o reconfigurarla, te recomendamos estudiar esta sección. Aquí se describe el proceso de conexión de la protección, lo que te ayudará a entender rápidamente todos los matices.

1. Regístrate o inicia sesión en tu cuenta de GeeTest.

2. Ve a Captcha Dashboard y selecciona CAPTCHA v3:

HowTo Connect image 1

3. Haz clic en +New Captcha para crear una nueva captcha. Indica el nombre de la captcha (por ejemplo, producto o proyecto), la URL del sitio donde se integrará la captcha y el contexto de uso de la captcha (por ejemplo, Inicio de sesión / Registro / Restablecimiento de contraseña, etc.).

4. Recibirás un CAPTCHA ID y un KEY únicos. Se pueden configurar en el panel de seguridad.

HowTo Connect image 2

5. Configura la parte del servidor (Server SDK):

El servidor trabaja con dos API:

  • API1: inicialización (creación del challenge)
  • API2: verificación del resultado después de pasar la captcha

php
<?php
header('Content-Type: application/json');

const CAPTCHA_ID = '07df3141a35**********19a473d7c50';
const CAPTCHA_KEY = '543b19036ef********8e07d121b81e9';

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

function getJson($url) {
    $res = @file_get_contents($url);
    return $res ? json_decode($res, true) : null;
}

// API1: inicialización
if ($path === '/register') {
    $data = getJson("https://api.geetest.com/register.php?gt=" . CAPTCHA_ID . "&json_format=1");
    echo json_encode($data ? [
        'gt' => CAPTCHA_ID,
        'challenge' => $data['challenge'],
        'success' => $data['success'] === 1,
        'new_captcha' => true
    ] : ['success' => 0]);
    exit;
}

// API2: verificación
if ($path === '/validate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $req = json_decode(file_get_contents('php://input'), true);
    $data = getJson("https://api.geetest.com/validate.php?" . http_build_query([
        'seccode' => $req['geetest_seccode'] ?? '',
        'challenge' => $req['geetest_challenge'] ?? '',
        'gt' => CAPTCHA_ID,
        'json_format' => 1
    ]));
    echo json_encode(['success' => !empty($data['seccode'])]);
    exit;
}

http_response_code(404);
echo json_encode(['error' => 'Not found']);

6. Conecta la parte cliente (Client SDK):

En el cliente cargas gt.js y llamas a initGeetest, pasando los parámetros desde el servidor (API1). Ejemplo con ajax:

javascript
ajax({
    url: "https://example.com/register",
    type: "get",
    dataType: "json",
    success: function (data) {
        initGeetest({
            gt: data.gt,
            challenge: data.challenge,
            offline: !data.success,
            new_captcha: true
        }, function (captchaObj) {
            captchaObj.appendTo("#captcha");

            captchaObj.onSuccess(function () {
                const result = captchaObj.getValidate();
                ajax({
                    url: "https://example.com/validate",
                    type: "post",
                    contentType: "application/json",
                    data: JSON.stringify(result),
                    success: function(res) {
                        if (res.success) alert('CAPTCHA passed');
                        else alert('CAPTCHA failed');
                    }
                });
            });
        });
    }
});

Comprobación del funcionamiento

Asegúrate de que:

  • /register devuelve challenge
  • La captcha se muestra correctamente
  • Después de pasar la captcha, en la consola del navegador se ve la solicitud a /validate
  • El servidor devuelve "success": true

Failback (modo de reserva)

Si el servidor de GeeTest no está disponible:

  • El cliente recibe success: false
  • La captcha cambia al modo local (funciona sin conexión a GeeTest Cloud). Para probarlo, simplemente sustituye el CAPTCHA_ID por uno incorrecto (por ejemplo, 123456789).

Background
Posibles errores y depuración
Bug Icon
Parámetros incorrectos
La captcha no se muestra o devuelve el error invalid-gt / invalid-challenge. Comprueba que se utilizan gt y challenge actuales para tu página.
Bug Icon
Tiempo de espera agotado
la solución de la captcha no se ha recibido a tiempo. Aumenta el tiempo de espera cuando utilices servicios de resolución automática (por ejemplo, CapMonster).
Bug Icon
Campos vacíos
No se han enviado a la página challenge, validate o seccode. Asegúrate de que se insertan correctamente en los campos ocultos del formulario.
Bug Icon
Respuesta success=false
el token ha caducado, se ha reutilizado o es falso. Para el diagnóstico, activa el registro de las solicitudes y revisa los campos que devuelve el servidor (los error-codes al trabajar con CapMonster o con tu servidor de verificación).
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
Guarda la <span class="font-bold">clave de la captcha (KEY secreto) solo en el servidor</span>, no la pases a la parte cliente.
Registra los códigos de error durante la verificación (los <span class="font-bold">error-codes</span> o campos de la respuesta del servidor) para entender las causas de las comprobaciones fallidas.
Añade al final del formulario enlaces a la <span class="font-bold">Política de privacidad</span> y a las <span class="font-bold">Condiciones de uso de GeeTest</span>, si se requiere por la licencia o por tus políticas internas.
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 GeeTest CAPTCHA v3, 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 GeeTest CAPTCHA v3 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
Enlaces útiles
DocIconDocumentación de GeeTest v3DocIconDocumentación de CapMonster Cloud (trabajo con GeeTest v3)DocIconCrear una cuenta en GeeTestDocIconCrear una cuenta en CapMonster Cloud

Preguntas frecuentes sobre GeeTest CAPTCHA v3

Los valores challenge tienen una vida útil corta — normalmente menos de dos minutos. Pasar un challenge obsoleto a createTask es la causa más común de ERROR_TOKEN_EXPIRED. Obtenga un challenge nuevo del endpoint init-params del sitio lo antes posible antes de cada llamada createTask — sin caché ni reutilización.

Importante: las tareas que devuelven ERROR_TOKEN_EXPIRED se facturan igualmente.

Consultar https://api.capmonster.cloud/getTaskResult devuelve un objeto solution con tres campos (los valores siempre serán diferentes):

json
{
  "solution": {
    "challenge": "0f759dd1ea6c4wc76cedc2991039ca4f23",
    "validate": "6275e26419211d1f526e674d97110e15",
    "seccode": "510cd9735583edcb158601067195a5eb|jordan"
  }
}

Asócielos respectivamente a los campos ocultos geetest_challenge, geetest_validate y geetest_seccode antes de enviar el formulario. Puede inyectarlos con Playwright, Puppeteer, Selenium o un cliente HTTP simple.

Nota: consulte a intervalos regulares y no supere 120 solicitudes por tarea para evitar el bloqueo de la cuenta. Según la carga del sistema, la respuesta suele llegar en 10 a 30 segundos.

Para entender la lógica de automatización, ayuda encontrar estos parámetros manualmente:

  1. Abra DevTools → pestaña Network.
  2. Filtre por init-params y recargue la página.
  3. La respuesta JSON contendrá tanto gt como challenge. Este es el endpoint que su automatización debe interceptar.

Para la automatización con Playwright u otro navegador headless, intercepte la respuesta init-params a nivel de red — es más rápido y fiable que el análisis del DOM. Luego analice la carga JSON para gt y challenge.

Hay scripts de extracción listos para usar en la documentación de CapMonster Cloud.

GeeTest v3 activa el modo sin conexión/bypass cuando sus servidores de verificación no son accesibles. En este modo, el widget sigue mostrándose y el usuario puede interactuar con él, pero la verificación del sitio en cliente y servidor se gestiona localmente.

No afecta a los flujos de resolución automatizada.

Sí. CapMonster Cloud puede usarse en flujos automatizados de GeeTest CAPTCHA v3 cuando necesite validar el envío de formularios, escenarios de QA o comportamiento bajo carga sin interacción manual.

Use valores gt y challenge nuevos para cada tarea, inyecte challenge, validate y seccode en los campos correspondientes y supervise las tasas de rechazo en su entorno objetivo. Consulte las tarifas actuales en la página de precios.