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 v4, 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 v4 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.
Al probar formularios que incluyen GeeTest CAPTCHA v4, 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 v4 es necesario indicar los siguientes parámetros:
type - GeeTestTask;
websiteURL - dirección de la página en la que se resuelve la captcha;
gt - clave identificadora de GeeTest para el dominio: parámetro captcha_id;
version - 4;
geetestApiServerSubdomain - subdominio del servidor de la API de GeeTest (debe ser distinto de api.geetest.com);
geetestGetLib - ruta al script de la captcha para mostrarla en la página. Puede ser necesario para algunos sitios;
initParameters - parámetros adicionales para la versión 4, que se usan junto con “riskType” (tipo de captcha / características de su verificación).
https://api.capmonster.cloud/createTask{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://gt4.geetest.com/",
"gt": "54088bb07d2df3c46b79f80300b0abbe",
"version": 4,
"initParameters": {
"riskType": "slide"
}
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_id": "f5c2ad5a8a3cf37192d8b9c039950f79",
"lot_number": "bcb2c6ce2f8e4e9da74f2c1fa63bd713",
"pass_token": "edc7a17716535a5ae624ef4707cb6e7e478dc557608b068d202682c8297695cf",
"gen_time": "1683794919",
"captcha_output": "XwmTZEJCJEnRIJBlvtEAZ662T...[cut]...SQ3fX-MyoYOVDMDXWSRQig56"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from "@zennolab_com/capmonstercloud-client";
const CAPMONSTER_API_KEY = "YOUR_CAPMONSTER_API_KEY";
async function solveGeetestV4(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
let detected = null;
let solutionObj = null;
// 1. Interceptar la respuesta de /load (determinar captcha_id, challenge, etc.)
page.on("response", async (response) => {
const url = response.url();
if (!url.startsWith("https://gcaptcha4.geetest.com/load?")) return;
const params = new URLSearchParams(url.split("?")[1] || "");
const captchaId = params.get("captcha_id");
const challenge = params.get("challenge");
const captchaType = params.get("captcha_type");
if (captchaId && challenge) {
detected = { captchaId, challenge, captchaType };
console.log("Detected GeeTest v4 load:", detected);
}
});
// 2. Cargar la página
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. Esperar hasta capturar /load
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. Enviar la tarea a CapMonster Cloud
console.log("Sending task to CapMonster...");
const cmc = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: CAPMONSTER_API_KEY })
);
const task = new GeeTestRequest({
websiteURL: pageUrl,
gt: detected.captchaId,
challenge: detected.challenge,
version: "4",
initParameters: {
riskType: detected.captchaType || "slide"
}
});
const solveRes = await cmc.Solve(task);
const sol = solveRes.solution || solveRes;
solutionObj = {
captcha_id: sol.captcha_id || detected.captchaId,
captcha_output: sol.captcha_output,
lot_number: sol.lot_number,
pass_token: sol.pass_token
};
console.log("Got solution from CapMonster:", solutionObj);
// 5. Insertar tus valores en /verify para obtener una respuesta satisfactoria
await page.route("https://gcaptcha4.geetest.com/verify*", async (route) => {
console.log("Intercepted /verify, injecting fake success...");
const body = `geetest_${Date.now()}(${JSON.stringify({
status: "success",
data: {
result: "success",
seccode: {
captcha_id: solutionObj.captcha_id,
captcha_output: solutionObj.captcha_output,
lot_number: solutionObj.lot_number,
pass_token: solutionObj.pass_token
}
}
})})`;
await route.fulfill({
status: 200,
contentType: "application/javascript",
body
});
});
// 6. Imitar la acción del usuario (por ejemplo, hacer clic en el botón de la captcha)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// Ejemplo de llamada de verificación:
try {
await page.click('.geetest_btn'); // botón de la captcha
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// A veces es necesario llamar a verify() manualmente:
await page.evaluate(() => {
if (window.initGeetest4 && typeof verify === "function") {
verify();
}
});
console.log("Waiting for verification request...");
await page.waitForTimeout(3000);
await browser.close();
return { detected, solution: solutionObj };
}
(async () => {
const url = "https://example.com"; // sustituir por una página con GeeTest v4
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. Regístrate o accede a tu cuenta de GeeTest.
2. Ve al Captcha Dashboard y selecciona Behavior Verification v4:

3. En el panel de control haz clic en + Create application.
4. Indica APP/website name (el nombre del sitio o aplicación donde se utilizará la captcha), Address (el dominio principal del sitio donde se instalará la captcha, por ejemplo, https://example.com), Industry (la categoría del sitio, por ejemplo, “E-commerce”, “Social Media”, etc.) y haz clic en Confirm.
5. Haz clic en Add events junto al nombre de la aplicación recién creada. Especifica Event: el nombre del escenario concreto (evento) en el que se utilizará la captcha, por ejemplo login, register, etc.; Device: la plataforma (por ejemplo Web/Wap); Business types: el tipo de escenario de uso de la captcha (por ejemplo, Sign-up / Sign-in — registro / inicio de sesión). Haz clic en Add.
6. Ahora en tu panel verás el ID (se utiliza en el cliente y el servidor) y la Key (se utiliza en el servidor para la verificación) de la captcha creada:

7. Conecta la parte cliente
Incluye el script:
<script src="https://static.geetest.com/v4/gt4.js"></script>Inicializa la CAPTCHA:
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // insertar en un elemento de la página
}
);Importante:
<!-- Incluir el script de la CAPTCHA -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- Contenedor para la CAPTCHA -->
<div id="captcha"></div>
<script>
// Inicialización de la CAPTCHA
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // sustituir por tu CaptchaId
},
function (captcha) {
// Insertar la CAPTCHA en el elemento de la página
captcha.appendTo("#captcha");
// Aquí se puede manejar el paso correcto de la verificación
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// Aquí se puede enviar validate al servidor para la verificación
});
}
);
</script>
8. Configura la parte servidor.
Cuando el usuario supera la CAPTCHA en el frontend, se genera un conjunto de parámetros. Es necesario enviarlos al backend y luego verificarlos a través de la API secundaria de GeeTest para confirmar que la verificación ha sido correcta.
API secundaria de verificación:
http://gcaptcha4.geetest.com/validateParámetros principales de la solicitud
{
"status": "success",
"result": "success",
"reason": "",
"captcha_args": {
"used_type": "slide",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "anti crawler",
"referer": "http://127.0.0.1:8077/"
}
}<?php
$captcha_id = 'YOUR_CAPTCHA_ID';
$captcha_key = 'YOUR_CAPTCHA_KEY';
$api_server = 'http://gcaptcha4.geetest.com';
// Obtener los parámetros desde el frontend
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// Generar la firma
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// Formar los datos de la solicitud
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// Solicitud a la API secundaria de verificación
$url = $api_server . '/validate?captcha_id=' . $captcha_id;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
if ($result === FALSE) {
$response = ['login' => 'fail', 'reason' => 'request geetest api fail'];
} else {
$gt_msg = json_decode($result, true);
if ($gt_msg['result'] === 'success') {
$response = ['login' => 'success', 'reason' => $gt_msg['reason']];
} else {
$response = ['login' => 'fail', 'reason' => $gt_msg['reason']];
}
}
echo json_encode($response);
?>
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 v4, 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 v4 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.