GeeTest CAPTCHA v3
en CapMonster Cloud

Captcha-oplossing, installatie op de website en testen.

Prijzen van GeeTest CAPTCHA v3-oplossing

Bericht
Prijs (USD)
$ 1.20
1000 tokens
Heb je een site geërfd met een ingebouwde captcha of andere bescherming, maar zonder toegang tot de broncode? Dan wil je natuurlijk weten welke oplossing draait, of die goed is ingesteld en hoe je de werking test.

In dit artikel hebben we geprobeerd antwoord te geven op alle belangrijke vragen. De eerste stap bij het oplossen van het vraagstuk is vaststellen welk beveiligingssysteem wordt gebruikt. Daarvoor kun je de lijst met populaire captcha’s en anti-botbeveiligingssystemen raadplegen, met visuele voorbeelden en kernkenmerken die je helpen snel te bepalen waarmee je te maken hebt.

Als je ontdekt dat je website GeeTest CAPTCHA v3 gebruikt, is de volgende stap om de eigenschappen en werking ervan uitgebreider te bestuderen. In dit artikel vind je ook een handleiding voor het integreren van GeeTest CAPTCHA v3, zodat je volledig begrijpt hoe het systeem op je website werkt. Zo kun je niet alleen de huidige bescherming beter doorgronden, maar ook het onderhoud ervan goed plannen.

Wat is GeeTest CAPTCHA v3
Wat is GeeTest CAPTCHA v3

GeeTest CAPTCHA v3 is een beveiligingssysteem voor websites tegen geautomatiseerde acties die schade kunnen veroorzaken. Het helpt echte gebruikers van bots te onderscheiden en zorgt zo voor de veiligheid en stabiele werking van je webresource.

Background
Voorbeelden van GeeTest CAPTCHA v3
Intelligent mode
Intelligent mode
De controle van de gebruiker gebeurt voornamelijk op basis van gedrag en interactie met de site, zonder dat er expliciete opdrachten hoeven te worden opgelost.
Slide CAPTCHA
Slide CAPTCHA
Een schuifbalk (slider) die je moet verplaatsen om een puzzel te voltooien of een beeldelement uit te lijnen.
Icon CAPTCHA
Icon CAPTCHA
Het selecteren van afbeeldingen in de aangegeven volgorde.
Space CAPTCHA
Space CAPTCHA
Het verplaatsen van een vorm naar de juiste positie op de afbeelding.

Hoe los je GeeTest CAPTCHA v3 op met CapMonster Cloud

Bij het testen van formulieren met GeeTest CAPTCHA v3 moet je vaak bevestigen dat de captcha goed is ingebouwd en werkt.

Je kunt de captcha op je site handmatig testen.

  • Open de pagina met het formulier en controleer of de captcha verschijnt.
  • Probeer het formulier te versturen zonder oplossing — de server hoort een fout terug te geven.
  • Na een succesvolle oplossing moet het formulier probleemloos worden verzonden.

Voor automatische oplossingen kun je tools zoals CapMonster Cloud gebruiken. Deze ontvangen de captcha-parameters, verwerken ze op hun servers en sturen een token terug dat je in het formulier kunt zetten om de controle zonder gebruikersinteractie te omzeilen.

Werken met CapMonster Cloud via de API bestaat doorgaans uit de volgende stappen:

Taak aanmakenTaak aanmaken
arrow
API-aanvraag versturenAPI-aanvraag versturen
arrow
Resultaat ontvangenResultaat ontvangen
arrow
Token op de pagina plaatsenToken op de pagina plaatsen
arrow
GeeTest CAPTCHA v3 herkennen met kant-en-klare libraries
De dienst CapMonster Cloud biedt kant-en-klare libraries om eenvoudig te werken met Python, JavaScript (Node.js) en C#.
Python
JavaScript
C#
Oplossen, token invullen en formulier verzenden
Een Node.js-voorbeeld voor de volledige cyclus van captcha-herkenning op je webpagina. Mogelijke aanpakken: gebruik HTTP-verzoeken om de HTML en de captcha-parameters op te halen, stuur het antwoord en verwerk het resultaat; of gebruik automatiseringstools (zoals Playwright) om de pagina te openen, te wachten tot de captcha verschijnt, de parameters te versturen (voor tests kun je zowel correcte als onjuiste gegevens sturen), de oplossing via de CapMonster Cloud-client op te halen, het token in het formulier te plaatsen en het resultaat te bekijken.
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('Pagina wordt geopend...');
  await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });

  console.log('Captcha-parameters worden opgehaald...');
  const init = await page.evaluate(async () => {
    // We sturen een verzoek naar de server om de init-params voor GeeTest op te halen; vervang dit door je eigen endpoint
    const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);  
    return r.json();
  });
  console.log('Init params:', init);

  console.log('We maken een taak aan voor 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('Captcha-oplossing:', sol);

  console.log('We vullen de oplossing in de verborgen velden in...');
  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"]'); // vervang dit door je eigen waarde
  console.log('We sturen een verify-verzoek naar de server...');
  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
    };
    // vervang dit door je eigen waarde
    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('Resultaat van de captcha-controle:', result);

  await page.waitForTimeout(3000);
  await browser.close();
})();
Hoe GeeTest CAPTCHA v3 met je website te verbinden
Om goed te begrijpen hoe de captcha op je website werkt, hoe de validatielogica is opgebouwd en hoe je de integratie opnieuw kunt aansluiten of herconfigureren, raden we aan deze sectie door te nemen. Hier wordt het hele proces van het instellen van de bescherming beschreven, zodat je alle details snel kunt doorlopen.

1. Registreer je of log in op je GeeTest-account.

2. Ga naar het Captcha Dashboard en selecteer CAPTCHA v3:

HowTo Connect image 1

3. Klik op +New Captcha om een nieuwe captcha aan te maken. Geef een naam op (bijvoorbeeld product of project), de URL van de website waar de captcha geïntegreerd wordt en kies de context waarin de captcha wordt gebruikt (bijvoorbeeld Login / Registratie / Wachtwoordherstel, enz.).

4. Je ontvangt een unieke CAPTCHA ID en KEY. Deze kunnen worden beheerd in het security dashboard.

HowTo Connect image 2

5. Configureer de server-side (Server SDK):

De server werkt met twee API’s:

  • API1 — initialisatie (aanmaken van de challenge)
  • API2 — controle van het resultaat nadat de captcha is doorlopen

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: initialisatie
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: verificatie
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. Sluit het clientgedeelte aan (Client SDK):

Aan de clientzijde laad je gt.js en roep je initGeetest aan, waarbij je de parameters doorgeeft die je van de server (API1) hebt ontvangen. Voorbeeld met 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');
                    }
                });
            });
        });
    }
});

Controle van de werking

Controleer het volgende:

  • /register geeft een challenge terug
  • De captcha wordt correct weergegeven
  • Na het doorlopen van de captcha zie je in de browserconsole een verzoek naar /validate
  • De server retourneert "success": true

Failback (noodmodus)

Als de GeeTest-server niet beschikbaar is:

  • De client ontvangt success: false
  • De captcha schakelt over naar de lokale modus (werkt zonder verbinding met GeeTest Cloud). Om dit te testen, vul je bewust een ongeldige CAPTCHA_ID in (bijvoorbeeld 123456789).

Background
Mogelijke fouten en debugging
Bug Icon
Ongeldige parameters
De captcha wordt niet weergegeven of geeft de fout invalid-gt / invalid-challenge terug. Controleer of je actuele waarden voor gt en challenge voor je pagina gebruikt.
Bug Icon
Time-out bij oplossing
de captcha-oplossing is niet op tijd ontvangen. Verhoog de wachttijd (timeout) als je automatische oplossingsdiensten gebruikt (bijvoorbeeld CapMonster).
Bug Icon
Lege velden
challenge, validate of seccode worden niet naar de pagina doorgegeven. Zorg ervoor dat ze correct in verborgen formulier­velden worden ingevuld.
Bug Icon
Antwoord success=false
het token is verlopen, opnieuw gebruikt of vervalst. Schakel voor diagnose het loggen van verzoeken in en controleer de velden die door de server worden teruggestuurd (zoals de error-codes bij gebruik van CapMonster of je eigen validatieserver).
Controle van de robuustheid
Controleer na de integratie of het systeem de site echt beschermt tegen geautomatiseerde acties.
Aanbevelingen voor veiligheid en optimalisatie
Bewaar de <span class="font-bold">captchasleutel (geheime KEY) uitsluitend op de server</span> en stuur deze niet naar de client-side.
Log foutcodes tijdens de validatie (de <span class="font-bold">error-codes</span> of andere velden in het serverantwoord) om de oorzaken van mislukte controles te achterhalen.
Voeg onderaan het formulier links toe naar het <span class="font-bold">privacybeleid</span> en de <span class="font-bold">gebruiksvoorwaarden van GeeTest</span>, als dit vereist is door de licentie of interne richtlijnen.
Conclusie

Als je een website in beheer krijgt waarop al een captcha of een ander beveiligingssysteem is geïnstalleerd en je geen toegang hebt tot de code, is dat geen probleem! Het is vrij eenvoudig te bepalen welke technologie precies wordt gebruikt. Voor het controleren of alles correct werkt, kun je de herkenningsservice CapMonster Cloud in een geïsoleerde testomgeving gebruiken, zodat je zeker weet dat het tokenverwerkingsmechanisme en de validatielogica correct functioneren.

In het geval van GeeTest CAPTCHA v3 is het voldoende om het systeem te herkennen, het gedrag te analyseren en te bevestigen dat de beveiliging correct werkt. In het artikel hebben we laten zien hoe je GeeTest CAPTCHA v3 kunt herkennen en waar je instructies vindt om het te koppelen of opnieuw te configureren, zodat je de bescherming met vertrouwen kunt onderhouden en de werking onder controle kunt houden.

Conclusion
Handige links
DocIconGeeTest v3 documentatieDocIconCapMonster Cloud documentatie (werken met GeeTest v3)DocIconEen GeeTest-account aanmakenDocIconEen CapMonster Cloud-account aanmaken

Veelgestelde vragen over GeeTest CAPTCHA v3

Challenge-waarden hebben een korte levensduur — meestal minder dan twee minuten. Een verouderde challenge doorgeven aan createTask is de meest voorkomende oorzaak van ERROR_TOKEN_EXPIRED. Haal vóór elke createTask-aanroep zo snel mogelijk een nieuwe challenge op van het init-params-endpoint van de site — geen caching, geen hergebruik.

Let op: taken die ERROR_TOKEN_EXPIRED retourneren, worden nog steeds als gefactureerd geteld.

Pollen van https://api.capmonster.cloud/getTaskResult levert een solution-object met drie velden (de waarden zijn altijd verschillend):

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

Koppel ze respectievelijk aan de verborgen velden geetest_challenge, geetest_validate en geetest_seccode vóór het verzenden van het formulier. Je kunt ze injecteren met Playwright, Puppeteer, Selenium of een gewone HTTP-client.

Opmerking: poll op regelmatige intervallen en overschrijd niet 120 verzoeken per taak om accountblokkering te voorkomen. Afhankelijk van de systeembelasting komt het antwoord meestal binnen 10 tot 30 seconden.

Om de automatiseringslogica te begrijpen, helpt het deze parameters handmatig te vinden:

  1. Open DevTools → tabblad Network.
  2. Filter op init-params en laad de pagina opnieuw.
  3. Het JSON-antwoord bevat zowel gt als challenge. Dit is het endpoint dat je automatisering moet onderscheppen.

Voor automatisering met Playwright of een andere headless browser, onderschep het init-params-antwoord op netwerkniveau — dat is sneller en betrouwbaarder dan DOM-parsing. Parseer daarna de JSON-payload voor gt en challenge.

Kant-en-klare extractiescripts zijn beschikbaar in de CapMonster Cloud-documentatie.

GeeTest v3 activeert de offline/bypass-modus wanneer de verificatieservers onbereikbaar worden. In deze modus wordt de widget nog steeds weergegeven en kan de gebruiker ermee interacteren, maar de client- en serververificatie van de site wordt lokaal afgehandeld.

Het heeft geen invloed op geautomatiseerde oplossingsworkflows.

Ja. CapMonster Cloud kan worden gebruikt in geautomatiseerde GeeTest CAPTCHA v3-workflows wanneer je formulierverzending, QA-scenario's of loadtestgedrag zonder handmatige interactie moet valideren.

Gebruik voor elke taak verse gt- en challenge-waarden, injecteer challenge, validate en seccode in de bijbehorende velden en monitor afwijzingspercentages in je doelomgeving. Bekijk de actuele tarieven op de prijspagina.