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.
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.
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.
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:
En la solicitud para resolver GeeTest CAPTCHA v3 es necesario especificar los siguientes parámetros:
type - GeeTestTask;
websiteURL - la dirección de la página en la que el usuario pasa la captcha. La URL correcta se envía en la cabecera Referer en la petición a https://api-na.geetest.com/gettype.php;
gt - clave identificadora GeeTest gt para el dominio;
challenge - antes de cada tarea hay que enviar una petición de la que se devuelve un nuevo valor de challenge; de lo contrario, un token caducado provocará el error ERROR_TOKEN_EXPIRED;
geetestApiServerSubdomain - subdominio del servidor de la API de Geetest (debe ser distinto de api.geetest.com).
https://api.capmonster.cloud/createTask{
"clientKey":"YOUR_CAPMONSTER_CLOUD_API_KEY",
"task":
{
"type":"GeeTestTask",
"websiteURL":"https://www.example.com",
"gt":"022397c99c9f646f6477822485f30404",
"challenge":"7f044f48bc951ecfbfc03842b5e1fe59",
"geetestApiServerSubdomain":"api-na.geetest.com"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"challenge":"0f759dd1ea6c4wc76cedc2991039ca4f23",
"validate":"6275e26419211d1f526e674d97110e15",
"seccode":"510cd9735583edcb158601067195a5eb|jordan"
}
}// 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();
})();1. Regístrate o inicia sesión en tu cuenta de GeeTest.
2. Ve a Captcha Dashboard y selecciona CAPTCHA v3:

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.

5. Configura la parte del servidor (Server SDK):
El servidor trabaja con dos API:
<?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:
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:
Failback (modo de reserva)
Si el servidor de GeeTest no está disponible:
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.