GeeTest-captcha uitgelegd: hoe het werkt en hoe je het oplost
GeeTest is een captchaleverancier wiens widgets een bezoeker vragen een visuele taak op te lossen: een puzzelstuk in een gat slepen, een reeks iconen in een bepaalde volgorde aanklikken, of een korte schuifbeweging maken. Het komt veel voor op e-commercesites, inlogpagina's en app-backends in veel regio's. Het is ook een van de captchafamilies die Scarnox nog niet oplost. Deze gids legt uit hoe GeeTest werkt, waarom het automatiseren ervan moeilijker is dan een token-widget, welke aanpakken mensen in het algemeen gebruiken, en waar Scarnox-ondersteuning vandaag staat.
Wat GeeTest op een pagina doet
Een GeeTest-captcha laadt meestal in drie stappen:
- De pagina bevat het GeeTest-script en maakt een widget met een captcha-ID. In veel integraties wordt die ID doorgegeven als een parameter die
gtheet. - De widget vraagt de GeeTest-server om een nieuwe uitdaging. De uitdaging bevat een waarde
challengeen de afbeeldingen of tegelposities die nodig zijn voor de puzzel. - Wanneer de bezoeker de taak afrondt, stuurt de widget het resultaat terug naar de site. De backend van de site verifieert dat resultaat dan bij de captchaleverancier voordat het formulier wordt geaccepteerd.
De derde stap is belangrijk. Een waarde die er plausibel uitziet is niet genoeg, want de server controleert een resultaat dat aan één uitdaging is gekoppeld en verloopt. Daarom faalt een waarde die uit een andere sessie is gekopieerd, en werkt het opnieuw afspelen van een oud resultaat niet.
Waarom GeeTest moeilijker is dan een token-widget
Bij PopularCaptcha heeft de pagina één tokenstring nodig, en één verzoek levert die string op. GeeTest verschilt op drie punten:
- De uitkomst is het resultaat van een taak, niet één string. De site verwacht meerdere waarden die bij elkaar horen, en ze moeten allemaal uit dezelfde uitdaging komen.
- De uitdaging is visueel en positioneel. Een solver moet vinden waar een puzzelstuk past of welke iconen overeenkomen, en daarna een beweging maken die eruitziet als die van een persoon.
- Controles kijken naar gedrag, niet alleen naar het antwoord. Snelheid, pad en timing kunnen worden onderzocht. Een correcte positie die op een robotachtige manier wordt aangeleverd, kan nog steeds worden afgewezen.
Daarom is GeeTest oplossen een taak in meerdere stappen: de uitdaging ophalen, de doelen in de afbeelding vinden, een beweging genereren, die indienen en het oordeel lezen. Elke stap kan falen, en de uitdaging verloopt als je tussen de stappen te lang wacht.
Algemene aanpakken
Mensen die GeeTest-pagina's automatiseren gebruiken over het algemeen één van drie aanpakken. Geen van die aanpakken is een kortere weg, en elk heeft kosten:
- Een echte browser aansturen. Playwright of Selenium laadt de pagina en je script verschuift de schuif. Dit werkt het beste op een site die je beheert of een testomgeving die je mag gebruiken. De browser is echt, maar de beweging moet nog steeds natuurlijk lijken.
- Afbeeldingsmatching. Je code downloadt de puzzelachtergrond, vindt het gat met template matching (bijvoorbeeld met OpenCV) en berekent de sleepafstand. Dit is vaak het meest betrouwbare onderdeel van een zelfgebouwde opzet, en het breekt wanneer de leverancier de indeling van de afbeelding verandert.
- Een mens in de lus of een oplossingsdienst. Een persoon of een beheerde dienst lost de uitdaging op en geeft het resultaat terug. Scarnox is van plan deze optie voor GeeTest aan te bieden, maar die is nog niet live.
Hoe je ook kiest, houd de reikwijdte eerlijk: automatiseer flows die van jou zijn, testomgevingen die je mag gebruiken, of publieke data die je mag verzamelen.
De captcha-ID vinden
Je hebt geen code nodig om te beginnen. Open DevTools, laad de pagina opnieuw en zoek in het tabblad Network naar geetest of gt. Het eerste verzoek dat de widget laadt, toont meestal de captcha-ID. Een klein script kan die vastleggen, wat handig is wanneer je wilt merken dat een pagina zijn widget verandert:
import re
import requests
html = requests.get("https://example.com/login", timeout=30).text
match = re.search(r"gt['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", html)
print("captcha id:", match.group(1) if match else "not found")
Het patroon hierboven zoekt naar een hexadecimale waarde van 32 tekens naast gt. Leveranciers veranderen hun opmaak, dus zie dit als startpunt en controleer de uitvoer tegen de pagina die je test.
Waar Scarnox-ondersteuning staat
Wees hier duidelijk over wanneer je een project plant:
- Nu live: PopularCaptcha, zonder proxy en met je eigen proxy.
- Binnenkort: GeeTest, reCAPTCHA v2 en v3, Cloudflare Turnstile, AWS WAF en Arkose. Bouw geen productieflow die afhankelijk is van een GeeTest-oplossing zolang die niet als live staat vermeld.
Als je project nu GeeTest nodig heeft, is de praktische route om de browser- en afbeeldingsstappen zelf te bouwen voor pagina's die je mag testen, en je code klaar te houden om over te schakelen naar een API wanneer de ondersteuning live gaat. Tussentijds kun je een account aanmaken en beginnen met gratis proefcredit, zonder creditcard. Dat geeft je een werkende PopularCaptcha-flow om mee te testen en een plek om GeeTest later in te pluggen. Voor actuele tarieven, zie actuele prijzen.
Legitiem gebruik
- Je eigen inlog- of afrekenflow testen, waar een captcha geautomatiseerde regressietests blokkeert.
- Toegankelijkheidscontroles die bevestigen dat een bezoeker die een visuele puzzel niet kan oplossen nog een andere route heeft om een formulier af te ronden.
- Een site bewaken waarvoor je toestemming hebt, bijvoorbeeld controleren of een widget na een deploy nog laadt.
Gebruik captcha-automatisering niet om nepaccounts aan te maken, om een loginformulier aan te vallen of om beperkte voorraad te grijpen. Die gebruiken breken de regels van de meeste sites en worden door Scarnox niet ondersteund.