GeeTest v4 bringt im Vergleich zu Version 3 erhebliche Änderungen in der Architektur, den Herausforderungstypen und den Integrationsmustern mit sich. In diesem Leitfaden wird erläutert, was sich geändert hat und wie die Herausforderungen der Version 4 gelöst werden können.
GeeTest v3 vs. v4 – Hauptunterschiede
| Funktion | GeeTest v3 | GeeTest v4 |
|---|---|---|
| Initialisierung | gt + challenge vom Server |
Nur captcha_id |
| Herausforderungsparameter | Erforderlich für API-Aufruf | Clientseitig generiert |
| Herausforderungstypen | Schieben, klicken | Schieben, Klicken, Symbolauswahl, Leerzeichen |
| Validierung | Der Server gibt challenge zurück |
Verwendet lot_number + pass_token |
| API-Endpunkt | api.geetest.com |
gcaptcha4.geetest.com |
| Schwierigkeiten beim Skalieren | Behoben | Adaptive Risikobewertung |
Extrahieren von GeeTest v4-Parametern
# extract_geetest_v4.py
import re
from selenium import webdriver
def extract_geetest_v4_params(url):
"""Extract GeeTest v4 captcha_id from a page."""
driver = webdriver.Chrome()
driver.get(url)
page_source = driver.page_source
# GeeTest v4 uses captcha_id instead of gt
match = re.search(r'captcha_id["\']?\s*[:=]\s*["\']([a-f0-9]+)', page_source)
captcha_id = match.group(1) if match else None
# Check for v4-specific script
is_v4 = "gcaptcha4" in page_source or "gt4.js" in page_source
driver.quit()
return {
"captcha_id": captcha_id,
"is_v4": is_v4,
"pageurl": url,
}
# Usage
params = extract_geetest_v4_params("https://example.com/login")
print(f"Captcha ID: {params['captcha_id']}")
print(f"Is v4: {params['is_v4']}")
Lösen von GeeTest v4 mit CaptchaAI
# solve_geetest_v4.py
import requests
import time
import os
def solve_geetest_v4(captcha_id, pageurl):
"""Submit GeeTest v4 to CaptchaAI and get solution."""
api_key = os.environ["CAPTCHAAI_API_KEY"]
# Submit task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": "geetest",
"gt": captcha_id, # captcha_id maps to the gt parameter
"pageurl": pageurl,
"version": "4", # Specify v4 explicitly
"json": 1,
}, timeout=30)
result = resp.json()
if result.get("status") != 1:
raise RuntimeError(f"Submit failed: {result.get('request')}")
task_id = result["request"]
# Poll for result
time.sleep(10)
for _ in range(30):
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key,
"action": "get",
"id": task_id,
"json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
return data["request"] # Contains validation tokens
if data["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(data["request"])
time.sleep(5)
raise TimeoutError("GeeTest v4 solve timeout")
# Usage
solution = solve_geetest_v4(
captcha_id="abc123def456",
pageurl="https://example.com/login",
)
print(f"Solution: {solution}")
Injizieren der GeeTest v4-Lösung
# inject_geetest_v4.py
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
def inject_geetest_v4_solution(driver, solution):
"""Inject GeeTest v4 solution tokens into the page."""
# Parse solution — v4 returns different tokens than v3
if isinstance(solution, str):
try:
solution = json.loads(solution)
except json.JSONDecodeError:
pass
# GeeTest v4 validation uses lot_number, pass_token, gen_time, captcha_output
driver.execute_script("""
var solution = arguments[0];
// Set hidden form fields
var fields = {
'lot_number': solution.lot_number,
'pass_token': solution.pass_token,
'gen_time': solution.gen_time,
'captcha_output': solution.captcha_output,
};
for (var name in fields) {
var input = document.querySelector('input[name="' + name + '"]');
if (!input) {
input = document.createElement('input');
input.type = 'hidden';
input.name = name;
document.forms[0].appendChild(input);
}
input.value = fields[name];
}
// Trigger validation callback if available
if (window.captchaObj && typeof window.captchaObj.appendTo === 'function') {
window.captchaObj.appendTo('#captcha-container');
}
""", solution)
v4-Herausforderungstypen
Schiebepuzzle
Die klassische Slide-to-Match-Herausforderung. Der Benutzer zieht ein Puzzleteil.
Klicken Sie auf Auswahl
Der Benutzer klickt auf bestimmte Objekte (z. B. „Auf alle Gesichter klicken“). Verwendet die Symbolerkennung.
Raumbegründung
Neu in Version 4: Der Benutzer ordnet Formen in einem räumlichen Muster an. Komplexer als v3.
Symbolübereinstimmung
Der Benutzer stimmt mit den in einer Sequenz angezeigten Symbolen überein. Manuell schwieriger zu automatisieren.
CaptchaAI verarbeitet alle Herausforderungstypen der Version 4 – die API abstrahiert die herausforderungsspezifische Logik.
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
ERROR_WRONG_CAPTCHA_ID |
Verwendung des v3-gt-Werts anstelle des v4-captcha_id-Werts |
Überprüfen Sie die Seite auf das Skript gcaptcha4, um Version 4 zu bestätigen |
| Lösung abgelehnt | Fehlender Parameter version=4 |
Geben Sie für Version 4 immer version: "4" an |
captcha_id nicht gefunden |
JavaScript-gerendert | Verwenden Sie Selenium, um aus der gerenderten Seite zu extrahieren |
| Fehler im Token-Format | Parsing-String anstelle von JSON | Parsen Sie die Lösung als JSON, um einzelne Token zu erhalten |
FAQ
Woher weiß ich, ob eine Site GeeTest v3 oder v4 verwendet?
Suchen Sie in der Seitenquelle für Version 4 nach gcaptcha4.geetest.com oder gt4.js. Wenn Sie api.geetest.com und einen challenge-Parameter sehen, handelt es sich um v3.
Ist GeeTest v4 schwieriger zu lösen als v3?
Für automatisierte Löser nein. CaptchaAI verarbeitet beide Versionen. Der adaptive Schwierigkeitsgrad von V4 wirkt sich auf die Reibung des Endbenutzers aus, nicht jedoch auf die API-basierte Lösung.
Wie hoch ist die Erfolgsquote für GeeTest v4?
CaptchaAI meldet eine Erfolgsquote von 100 % für GeeTest-Herausforderungen, konsistent über v3 und v4 hinweg.
Verwandte Leitfäden
- GeeTest-Folienparameterhandbuch
- GeeTest vs. reCAPTCHA Vergleich
GeeTest v4 lösen – Beginnen Sie mit CaptchaAI.