GeeTest CAPTCHA v4
et CapMonster Cloud

Résolution de captcha, intégration au site et tests.

Tarifs de la solution GeeTest CAPTCHA v4

CAPTCHA
Prix (USD)
$ 1.20
1000 jetons
Vous avez hérité d’un site doté d’une captcha ou d’une autre couche de protection mais sans accès au code source ? Il est alors naturel de se demander quelle solution est installée, si elle est correctement configurée et comment la tester.

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.

Qu’est-ce que GeeTest CAPTCHA v4
Qu’est-ce que GeeTest CAPTCHA v4
GeeTest CAPTCHA v4 (Adaptive CAPTCHA/Behavior Verification) est une version plus moderne par rapport à v3, conçue pour protéger les sites web contre les actions automatisées pouvant nuire à la ressource. Le système analyse le comportement et les caractéristiques de l’appareil du visiteur et sélectionne un défi approprié : pour un véritable utilisateur, la vérification sera aussi simple que possible — un seul clic sur le widget de captcha suffit ; en cas de suspicion d’automatisation, un défi plus complexe est proposé et doit être réussi.
Background
Exemples de GeeTest CAPTCHA v4
No CAPTCHA
No CAPTCHA
La vérification de l’utilisateur repose principalement sur son comportement et son interaction avec le site, sans nécessité de résoudre des tâches explicites.
Icon CAPTCHA
Icon CAPTCHA
Sélection d’images dans l’ordre indiqué.
IconCrush CAPTCHA
IconCrush CAPTCHA
Permuter des éléments afin d’aligner trois icônes identiques sur une même ligne (comme dans les puzzles « match-3 »).
Slide CAPTCHA
Slide CAPTCHA
Un curseur (slider) pour assembler un puzzle ou faire correspondre des éléments de l’image.
Gobang CAPTCHA
Gobang CAPTCHA
Un curseur (slider) pour assembler un puzzle ou faire correspondre des éléments de l’image.

Comment résoudre GeeTest CAPTCHA v4 avec CapMonster Cloud

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.

  • Ouvrez la page du formulaire et vérifiez que la captcha s’affiche.
  • Essayez d’envoyer le formulaire sans la résoudre — le serveur doit renvoyer une erreur.
  • Après une résolution réussie, l’envoi doit se faire sans problème.

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 :

Création de la tâcheCréation de la tâche
arrow
Envoyer une requête APIEnvoyer une requête API
arrow
Réception du résultatRéception du résultat
arrow
Insertion du jeton sur la pageInsertion du jeton sur la page
arrow
Résolution de GeeTest CAPTCHA v4 à l’aide de bibliothèques prêtes à l’emploi
Le service CapMonster Cloud fournit des bibliothèques prêtes à l’emploi pour travailler facilement en Python, JavaScript (Node.js) et C#.
Python
JavaScript
C#
Résolution, insertion du jeton et envoi du formulaire
Exemple en Node.js pour le cycle complet de résolution du captcha sur votre page web. Approches possibles : utiliser des requêtes HTTP pour obtenir le HTML et les paramètres du captcha, envoyer la réponse et traiter le résultat ; ou, avec des outils d’automatisation (par exemple Playwright), ouvrir la page, attendre l’affichage du captcha, envoyer les paramètres (pour les tests vous pouvez envoyer des données correctes ou incorrectes), obtenir la solution via le client CapMonster Cloud, insérer le jeton dans le formulaire et voir le résultat.
python
// 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);
})();
Comment connecter GeeTest CAPTCHA v4 à votre site
Pour bien comprendre le fonctionnement du captcha sur votre site, le comportement de la vérification, ainsi que la façon de le reconnecter ou de le reconfigurer, nous vous recommandons d’étudier cette section. Elle décrit le processus de mise en place de la protection, ce qui vous aidera à maîtriser rapidement tous les détails.

1. Inscrivez-vous ou connectez-vous à votre compte GeeTest.

2. Accédez au Captcha Dashboard et sélectionnez Behavior Verification v4 :

HowTo Connect image 1

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éé :

HowTo Connect image 2

7. Connectez la partie cliente

Incluez le script :

markup
<script src="https://static.geetest.com/v4/gt4.js"></script>

Initialisez la CAPTCHA :

javascript
initGeetest4(
  { captchaId: "Your CaptchaId" },
  function (captcha) {
    captcha.appendTo("#captcha"); // insérer dans un élément de la page
  }
);

Important :

  • La CAPTCHA doit être initialisée au chargement de la page, sinon elle ne pourra pas suivre le comportement de l’utilisateur.
  • Si vous utilisez plusieurs CAPTCHAs sur une même page, appelez initGeetest4 séparément pour chacune.
  • Si vous utilisez la CAPTCHA dans un iframe, ajoutez sandbox="allow-scripts allow-popups".

Exemple de codeExemple de code
arrow

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 :

javascript
url
http://gcaptcha4.geetest.com/validate

  • Méthode : GET/POST
  • Content-Type : application/x-www-form-urlencoded
  • Réponse : JSON

Principaux paramètres de la requête

  • lot_number – numéro de série de la vérification
  • captcha_output – données de vérification
  • pass_token – jeton de vérification
  • gen_time – heure de génération de la vérification
  • captcha_id – ID du CAPTCHA
  • sign_token – signature pour la vérification

Exemple de réponse réussieExemple de réponse réussie
arrow

Exemple de vérification de CAPTCHA en PHPExemple de vérification de CAPTCHA en PHP
arrow

Background
Erreurs possibles et débogage
Bug Icon
Paramètres invalides
Le captcha ne s’affiche pas ou renvoie des erreurs telles que invalid-captcha-id / invalid-challenge. Vérifiez que vous utilisez des valeurs à jour pour captcha_id et challenge, correspondant à votre page. Ces paramètres sont générés dynamiquement à chaque requête /load.
Bug Icon
Délai de résolution dépassé
La solution du captcha n’a pas été reçue à temps. Augmentez le délai d’attente lorsque vous utilisez des services de résolution automatique (par exemple CapMonster Cloud) et assurez-vous que la connexion à l’API est stable.
Bug Icon
Champs vides
captcha_output, pass_token ou lot_number ne sont pas transmis à la page ou à la requête de vérification. Assurez-vous que ces valeurs sont correctement insérées dans des champs cachés du formulaire ou dans le corps de la requête envoyée à votre serveur.
Bug Icon
Réponse success=false
Le jeton a expiré, a été réutilisé ou est falsifié. Activez la journalisation (logging) de toutes les requêtes et réponses du serveur de vérification afin de suivre des champs tels que error_code ou error_msg.
Tests de robustesse de la protection
Après l’intégration, vérifiez que le système protège réellement le site contre les actions automatisées.
Conseils de sécurité et d’optimisation
Conservez la <span class="font-bold">clé du captcha (KEY secrète) uniquement sur le serveur</span> et ne la transmettez jamais à la partie cliente.
Consignez les codes d’erreur lors de la vérification (<span class="font-bold">error-codes</span> ou champs de la réponse du serveur) afin de comprendre les causes des échecs de validation.
Ajoutez en bas du formulaire des liens vers votre <span class="font-bold">Politique de confidentialité</span> et les <span class="font-bold">Conditions d’utilisation de GeeTest</span>, si cela est exigé par la licence ou par vos politiques internes.
Conclusion

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.

Conclusion
Liens utiles
DocIconDocumentation GeeTest v4DocIconConsole développeur GeeTest v4DocIconDocumentation CapMonster Cloud (travail avec GeeTest v4)DocIconCréer un compte GeeTestDocIconCréer un compte CapMonster Cloud

Questions fréquentes sur GeeTest CAPTCHA v4

CapMonster Cloud utilise par défaut les endpoints GeeTest standard. N'incluez le paramètre geetestApiServerSubdomain dans le corps de votre requête GeeTestTask que si le site cible utilise un endpoint API spécifique pour charger le widget. Pour le détecter, inspectez le trafic réseau du site : si les requêtes d'initialisation vont vers un hôte non standard différent de api.geetest.com, passez cette valeur de sous-domaine dans le paramètre.

riskType indique au solver quel type d'interaction attendre — slide, icon, gobang et d'autres modes spécifiques aux challenges. Pour un challenge slider standard, définissez "riskType": "slide" dans la charge utile de la requête createTask. Par exemple :

POST https://api.capmonster.cloud/createTask

json
{
  "clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
  "task": {
    "type": "GeeTestTask",
    "websiteURL": "https://gt4.geetest.com/",
    "gt": "54088bb07d2df3c46b79f80300b0abbe",
    "version": 4,
    "initParameters": {
      "riskType": "slide"
    }
  }
}

Sans cela, le solver peut tenter le mauvais type d'interaction et renvoyer un jeton invalide.

CapMonster Cloud fournit des SDK officiels pour Python, Node.js et C#. Chaque SDK gère en interne la création de tâches, le polling de la solution CAPTCHA, la logique de nouvelle tentative et la gestion des délais d'attente. Utiliser ces SDK est le moyen le plus rapide de passer de la clé API à un solver fonctionnel.

Après la résolution, CapMonster Cloud renvoie quatre valeurs à transmettre à l'endpoint /verify du site :

  • captcha_output — les données de solution encodées
  • pass_token — le jeton de vérification
  • lot_number — le numéro de série de vérification
  • gen_time — l'horodatage de la solution générée

Combinez-les avec le captcha_id utilisé lors de la création de la tâche de résolution et transmettez ces valeurs à /verify pour obtenir une réponse réussie.

Extrayez les paramètres d'initialisation GeeTest en interceptant le trafic réseau pendant le chargement de la page. Dans Playwright, écoutez les réponses de la page et filtrez l'endpoint /load sur gcaptcha4.geetest.com. Analysez la chaîne de requête de l'URL pour extraire captcha_id et risk_type. Un exemple Playwright minimal en Python :

python
async def on_request(request):
    url = request.url
    if "https://gcaptcha4.geetest.com/load?" in url:
        query = parse_qs(urlparse(url).query)
        captcha_id = query.get("captcha_id", [None])[0]
        risk_type = query.get("risk_type", [None])[0]

        if captcha_id and not result["version"]:
            result["version"] = "v4"
            result["data"] = {
                "captchaId": captcha_id,
                "riskType": risk_type
            }

            print("GeeTest v4 detected:")
            print(result["data"])

Passez le captcha_id extrait comme paramètre gt, ainsi que riskType et version directement dans votre charge utile GeeTestTask. Pour le schéma API complet, consultez la documentation.