GeeTest CAPTCHA v3
et CapMonster Cloud

Résolution de captcha, installation sur le site et tests.

Tarifs de la solution GeeTest CAPTCHA v3

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 v3, 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 v3 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 v3
Qu'est-ce que GeeTest CAPTCHA v3

GeeTest CAPTCHA v3 est un système de protection des sites web contre les actions automatisées susceptibles de nuire à la ressource. Il permet de distinguer les utilisateurs réels des bots, garantissant la sécurité et le fonctionnement stable du site web.

Background
Exemples de GeeTest CAPTCHA v3
Intelligent mode
Intelligent mode
La vérification de l'utilisateur se fait principalement sur la base de son comportement et de son interaction avec le site, sans exiger de résoudre des tâches supplémentaires.
Slide CAPTCHA
Slide CAPTCHA
Un curseur qu'il faut déplacer pour assembler un puzzle ou faire correspondre un élément de l'image.
Icon CAPTCHA
Icon CAPTCHA
Sélection d'images dans l'ordre indiqué.
Space CAPTCHA
Space CAPTCHA
Déplacement d'une forme vers l'endroit correct sur l'image.

Comment résoudre GeeTest CAPTCHA v3 via CapMonster Cloud

Lors des tests de formulaires contenant GeeTest CAPTCHA v3, 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
Reconnaissance de GeeTest CAPTCHA v3 à 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 un cycle complet de reconnaissance de la captcha sur votre page web. Approches possibles : utiliser des requêtes HTTP pour obtenir le HTML et les paramètres de la captcha, envoyer la réponse et traiter le résultat ; ou, avec des outils d'automatisation (par exemple Playwright), ouvrir la page, attendre l'apparition de la 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
// 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('Ouverture de la page...');
  await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });

  console.log('Récupération des paramètres de la captcha...');
  const init = await page.evaluate(async () => {
    // Envoi d'une requête au serveur pour obtenir les paramètres init-params de GeeTest, remplacez par votre valeur
    const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);  
    return r.json();
  });
  console.log('Init params:', init);

  console.log('Création de la tâche pour 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('Solution de la captcha :', sol);

  console.log('Insertion de la solution dans les champs cachés...');
  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"]'); // remplacez par votre valeur
  console.log('Envoi de la requête de vérification (verify) au serveur...');
  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
    };
    // remplacez par votre valeur
    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('Résultat de la vérification de la captcha :', result);

  await page.waitForTimeout(3000);
  await browser.close();
})();
Comment connecter GeeTest CAPTCHA v3 à votre site
Pour bien comprendre le fonctionnement de la captcha sur votre site, la logique de sa vérification, ainsi que pour pouvoir la reconnecter ou la reconfigurer, nous vous recommandons d'étudier cette section. Elle décrit le processus de mise en place de la protection, ce qui vous aidera à vous familiariser rapidement avec tous les détails.

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

2. Accédez au Captcha Dashboard et sélectionnez CAPTCHA v3 :

HowTo Connect image 1

3. Cliquez sur +New Captcha pour créer une nouvelle captcha. Indiquez le nom de la captcha (par exemple, produit ou projet), l'URL du site sur lequel elle sera intégrée et choisissez le contexte d'utilisation de la captcha (par exemple, Connexion / Inscription / Récupération de mot de passe, etc.).

4. Vous recevrez un CAPTCHA ID et un KEY uniques. Ils peuvent être configurés dans le panneau de sécurité.

HowTo Connect image 2

5. Configurez la partie serveur (Server SDK) :

Le serveur fonctionne avec deux API :

  • API1 — initialisation (création du challenge)
  • API2 — vérification du résultat après le passage de 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 : initialisation
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 : vérification
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. Connectez la partie cliente (Client SDK) :

Côté client, vous chargez gt.js et appelez initGeetest en transmettant les paramètres depuis le serveur (API1). Exemple avec 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');
                    }
                });
            });
        });
    }
});

Vérification du fonctionnement

Assurez-vous que :

  • /register renvoie un challenge
  • La captcha s'affiche correctement
  • Après le passage de la captcha, une requête vers /validate est visible dans la console du navigateur
  • Le serveur renvoie "success": true

Failback (mode de secours)

Si le serveur GeeTest n'est pas disponible :

  • Le client reçoit success: false
  • La captcha passe en mode local (fonctionne sans connexion à GeeTest Cloud). Pour tester, remplacez simplement le CAPTCHA_ID par une valeur incorrecte (par exemple 123456789).

Background
Erreurs possibles et débogage
Bug Icon
Paramètres incorrects
La captcha ne s'affiche pas ou renvoie l'erreur invalid-gt / invalid-challenge. Vérifiez que vous utilisez des valeurs gt et challenge actuelles pour votre page.
Bug Icon
Délai d'attente dépassé
la solution de la 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).
Bug Icon
Champs vides
challenge, validate ou seccode ne sont pas transmis à la page. Assurez-vous qu'ils sont correctement insérés dans les champs cachés du formulaire.
Bug Icon
Réponse success=false
le jeton a expiré, a été réutilisé ou est falsifié. Pour le diagnostic, activez la journalisation des requêtes et vérifiez les champs renvoyés par le serveur (les error-codes lors du travail avec CapMonster ou avec votre serveur de vérification).
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é de la captcha (KEY secret) uniquement sur le serveur</span>, ne la transmettez pas à la partie cliente.
Journalisez les codes d'erreur lors de la vérification (les <span class="font-bold">error-codes</span> ou les champs de la réponse du serveur) afin de comprendre les causes des vérifications échouées.
Ajoutez en bas du formulaire des liens vers la <span class="font-bold">Politique de confidentialité</span> et les <span class="font-bold">Conditions d'utilisation de GeeTest</span>, si cela est requis par la licence ou vos exigences 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 v3, 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 v3 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 v3DocIconDocumentation CapMonster Cloud (travail avec GeeTest v3)DocIconCréation d'un compte GeeTestDocIconCréation d'un compte CapMonster Cloud

Questions fréquentes sur GeeTest CAPTCHA v3

Les valeurs challenge ont une durée de vie courte — généralement moins de deux minutes. Transmettre un challenge obsolète à createTask est la cause la plus fréquente de ERROR_TOKEN_EXPIRED. Récupérez un challenge frais depuis l'endpoint init-params du site aussi près que possible de chaque appel createTask — sans mise en cache ni réutilisation.

À noter : les tâches qui renvoient ERROR_TOKEN_EXPIRED sont tout de même facturées.

L'interrogation de https://api.capmonster.cloud/getTaskResult renvoie un objet solution avec trois champs (les valeurs seront toujours différentes) :

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

Associez-les respectivement aux champs cachés geetest_challenge, geetest_validate et geetest_seccode avant d'envoyer le formulaire. Vous pouvez les injecter avec Playwright, Puppeteer, Selenium ou un client HTTP classique.

Remarque : interrogez à intervalles réguliers et ne dépassez pas 120 requêtes par tâche pour éviter le blocage du compte. Selon la charge du système, la réponse arrive généralement en 10 à 30 secondes.

Pour comprendre la logique d'automatisation, il est utile de trouver ces paramètres manuellement :

  1. Ouvrez DevTools → onglet Network.
  2. Filtrez sur init-params et rechargez la page.
  3. La réponse JSON contiendra à la fois gt et challenge. C'est l'endpoint que votre automatisation doit intercepter.

Pour l'automatisation avec Playwright ou tout autre navigateur headless, interceptez la réponse init-params au niveau réseau — c'est plus rapide et plus fiable que l'analyse du DOM. Analysez ensuite la charge JSON pour gt et challenge.

Des scripts d'extraction prêts à l'emploi sont disponibles dans la documentation CapMonster Cloud.

GeeTest v3 active le mode hors ligne/bypass lorsque ses serveurs de vérification deviennent inaccessibles. Dans ce mode, le widget s'affiche toujours et l'utilisateur peut interagir avec lui, mais la vérification côté client et côté serveur du site est gérée localement.

Cela n'affecte pas les workflows de résolution automatisée.

Oui. CapMonster Cloud peut être utilisé dans des workflows automatisés GeeTest CAPTCHA v3 lorsque vous devez valider l'envoi de formulaires, des scénarios QA ou le comportement sous charge sans interaction manuelle.

Utilisez des valeurs gt et challenge fraîches pour chaque tâche, injectez challenge, validate et seccode dans les champs correspondants et surveillez les taux de rejet dans votre environnement cible. Consultez les tarifs actuels sur la page des tarifs.