Dans cet article, nous avons essayé de répondre à toutes les questions essentielles. Pour commencer à résoudre le problème, il faut d’abord déterminer quel système de protection est utilisé. Pour cela, vous pouvez consulter la liste des captchas et systèmes de protection antibot les plus populaires, qui présente des exemples visuels et des caractéristiques clés permettant d’identifier rapidement avec quoi vous avez affaire.
Si vous constatez que votre site utilise GeeTest CAPTCHA v4, l’étape suivante consiste à étudier plus en détail ses propriétés et son fonctionnement. Dans cet article, vous pouvez également consulter le guide d’intégration de GeeTest CAPTCHA v4 afin de comprendre pleinement la façon dont il fonctionne sur votre site. Cela vous permettra non seulement de mieux connaître la protection en place, mais aussi de planifier correctement sa maintenance.
Lors des tests de formulaires contenant GeeTest CAPTCHA v4, il est souvent nécessaire de vérifier que la captcha fonctionne et qu’elle est correctement intégrée.
Vous pouvez contrôler manuellement la captcha intégrée à votre site.
Pour une résolution automatique, utilisez des outils comme CapMonster Cloud qui reçoivent les paramètres de la captcha, les traitent sur leurs serveurs et renvoient un jeton prêt à l’emploi. Insérez ce jeton dans le formulaire pour passer la vérification sans interaction utilisateur.
Travailler avec CapMonster Cloud via l’API comprend généralement les étapes suivantes :
Dans la requête pour résoudre GeeTest CAPTCHA v4, vous devez indiquer les paramètres suivants :
type - GeeTestTask;
websiteURL - l’adresse de la page sur laquelle le captcha est résolu;
gt - la clé d’identification GeeTest pour le domaine – paramètre captcha_id;
version - 4;
geetestApiServerSubdomain - le sous-domaine du serveur d’API GeeTest (doit être différent de api.geetest.com);
geetestGetLib - le chemin vers le script du captcha pour son affichage sur la page. Peut être requis pour certains sites;
initParameters - paramètres supplémentaires pour la version 4, utilisés conjointement avec “riskType” (type de captcha / caractéristiques de sa vérification).
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. Intercepter la réponse /load (déterminer 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. Charger la page
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. Attendre jusqu’à l’interception de /load
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. Envoyer la tâche à 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. Insérer vos propres valeurs dans /verify pour obtenir une réponse réussie
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. Simuler l’action de l’utilisateur (par exemple, cliquer sur le bouton du captcha)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// Exemple d’appel de vérification :
try {
await page.click('.geetest_btn'); // bouton du captcha
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// Parfois, il est nécessaire d’appeler verify() manuellement :
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"; // remplacez par une page avec GeeTest v4
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. Inscrivez-vous ou connectez-vous à votre compte GeeTest.
2. Accédez au Captcha Dashboard et sélectionnez Behavior Verification v4 :

3. Dans le tableau de bord, cliquez sur + Create application.
4. Indiquez APP/website name (nom du site ou de l’application où le captcha sera utilisé), Address (domaine principal du site où le captcha sera installé, par exemple https://example.com), Industry (catégorie du site, par exemple “E-commerce”, “Social Media”, etc.), puis cliquez sur Confirm.
5. Cliquez sur Add events à côté du nom de l’application que vous venez de créer. Indiquez Event – le nom du scénario précis (événement) dans lequel le captcha sera utilisé, par exemple login, register, etc. ; Device – la plateforme (par exemple Web/Wap) ; Business types – le type de scénario d’utilisation du captcha (par exemple Sign-up / Sign-in — inscription / connexion). Cliquez sur Add.
6. Votre espace personnel affichera maintenant l’ID (utilisé côté client et côté serveur) et la Key (utilisée côté serveur pour la vérification) du captcha créé :

7. Connectez la partie cliente
Incluez le script :
<script src="https://static.geetest.com/v4/gt4.js"></script>Initialisez la CAPTCHA :
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // insérer dans un élément de la page
}
);Important :
<!-- Inclure le script de la CAPTCHA -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- Conteneur pour la CAPTCHA -->
<div id="captcha"></div>
<script>
// Initialisation de la CAPTCHA
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // remplacez par votre CaptchaId
},
function (captcha) {
// Insérer la CAPTCHA dans un élément de la page
captcha.appendTo("#captcha");
// Vous pouvez gérer ici le succès de la vérification
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// Ici, vous pouvez envoyer validate au serveur pour vérification
});
}
);
</script>
8. Configurez la partie serveur.
Lorsque l’utilisateur réussit la CAPTCHA sur le frontend, un ensemble de paramètres est généré. Vous devez les envoyer au backend puis les vérifier via l’API secondaire de GeeTest afin de confirmer que la vérification a bien réussi.
API de vérification secondaire :
http://gcaptcha4.geetest.com/validatePrincipaux paramètres de la requête
{
"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';
// Récupérer les paramètres depuis le frontend
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// Générer la signature
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// Former les données de la requête
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// Requête vers l’API de vérification secondaire
$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 vous avez récupéré un site avec un captcha ou un autre système de protection déjà installé, mais sans accès au code, pas de panique ! Il est assez simple d’identifier quelle technologie est utilisée. Pour vérifier que tout fonctionne correctement, vous pouvez utiliser le service de reconnaissance CapMonster Cloud dans un environnement de test isolé, afin de vous assurer que le mécanisme de traitement des jetons et la logique de vérification fonctionnent correctement.
Dans le cas de GeeTest CAPTCHA v4, il suffit d’identifier le système, d’étudier son comportement et de vérifier que la protection fonctionne correctement. Dans cet article, nous avons montré comment reconnaître GeeTest CAPTCHA v4 et où trouver les instructions pour son intégration ou sa reconfiguration, afin de maintenir la protection en toute confiance et de garder son fonctionnement sous contrôle.