GeeTest v3 bietet interaktive Herausforderungen – Schieberätsel, Symbolauswahl oder Wortzuordnung. Im Gegensatz zu reCAPTCHA verwendet GeeTest einen benutzerdefinierten Verifizierungsablauf mit drei Parametern (gt, challenge, api_server), die Sie vor der Lösung aus der Seite extrahieren müssen.
Dieser Leitfaden führt Sie durch den gesamten Prozess der Extraktion von GeeTest-Parametern und der Lösung der Herausforderung mit der CaptchaAI-API.
Anforderungen
| Artikel | Wert |
|---|---|
| CaptchaAI API-Schlüssel | Auscaptchaai.com |
GeeTest gt-Wert |
Statische Kennung pro Site |
GeeTest challenge |
Dynamischer Wert pro Sitzung |
| Seiten-URL | Die URL, unter der GeeTest angezeigt wird |
| Sprache | Python 3.7+ oder Node.js 14+ |
Schritt 1: GeeTest-Parameter extrahieren
GeeTest erfordert drei Parameter. Der gt ist statisch (für jede Anfrage gleich), während sich challenge pro Sitzung ändert.
Methode 1: Registerkarte „Netzwerk“.
- Öffnen Sie die Registerkarte „DevTools → Netzwerk
- Filtern Sie nach
register-slideodergettype.phpoderget.php - Lösen Sie das Captcha aus und suchen Sie nach der Initialisierungsanforderung
- Die Antwort enthält
gt,challengeund manchmalapi_server
{
"success": 1,
"gt": "019924a82c70bb123aae90d483087f94",
"challenge": "12345678abc90def12345678abc90def",
"new_captcha": true
}
Methode 2: Seitenquelle
// Search page source for initGeetest or gt value
document.querySelectorAll('script').forEach(s => {
if (s.textContent.includes('initGeetest')) {
console.log(s.textContent);
}
});
Methode 3: API-Endpunkt
Viele Websites rufen GeeTest-Parameter von ihrer eigenen API ab:
# The site's registration endpoint
params_response = requests.get("https://example.com/api/captcha/register")
data = params_response.json()
gt = data["gt"]
challenge = data["challenge"]
Schritt 2: Senden Sie die Aufgabe an CaptchaAI
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "geetest",
"gt": "019924a82c70bb123aae90d483087f94",
"challenge": "12345678abc90def12345678abc90def",
"api_server": "api.geetest.com", # Optional, use if site specifies
"pageurl": "https://example.com/login",
"json": 1
})
data = response.json()
if data.get("status") != 1:
raise Exception(f"Submit error: {data.get('request')}")
task_id = data["request"]
print(f"Task submitted: {task_id}")
Node.js
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
async function submitGeeTest(gt, challenge, pageurl) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: API_KEY,
method: 'geetest',
gt,
challenge,
api_server: 'api.geetest.com',
pageurl,
json: 1
}
});
if (data.status !== 1) throw new Error(`Submit error: ${data.request}`);
return data.request;
}
Schritt 3: Umfrage zur Lösung
Die GeeTest-Lösung gibt drei Werte zurück: challenge, validate und seccode.
Python
def get_geetest_solution(task_id):
for attempt in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result.get('request')}")
raise Exception("Timeout")
solution = get_geetest_solution(task_id)
# solution = {
# "geetest_challenge": "12345678abc90def12345678abc90def1a",
# "geetest_validate": "abcdef1234567890abcdef1234567890",
# "geetest_seccode": "abcdef1234567890abcdef1234567890|jordan"
# }
Node.js
async function getGeeTestSolution(taskId) {
for (let i = 0; i < 30; i++) {
await new Promise(r => setTimeout(r, 5000));
const { data } = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
});
if (data.status === 1) return data.request;
if (data.request !== 'CAPCHA_NOT_READY') throw new Error(data.request);
}
throw new Error('Timeout');
}
Schritt 4: Senden Sie die Lösung an die Zielsite
Senden Sie alle drei Werte an den Verifizierungsendpunkt der Site:
# Submit the GeeTest solution with the form data
verify_response = requests.post("https://example.com/api/login", data={
"username": "user@example.com",
"password": "password123",
"geetest_challenge": solution["geetest_challenge"],
"geetest_validate": solution["geetest_validate"],
"geetest_seccode": solution["geetest_seccode"]
})
print(f"Login status: {verify_response.status_code}")
Vollständiges Python-Beispiel
import requests
import time
API_KEY = "YOUR_API_KEY"
SITE_URL = "https://example.com/login"
# 1. Get GeeTest parameters from the site
params = requests.get("https://example.com/api/captcha/register").json()
# 2. Submit to CaptchaAI
submit = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "geetest",
"gt": params["gt"],
"challenge": params["challenge"],
"pageurl": SITE_URL,
"json": 1
}).json()
task_id = submit["request"]
# 3. Poll for solution
for _ in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
solution = result["request"]
break
# 4. Submit to site
login = requests.post(SITE_URL, data={
"username": "user@example.com",
"password": "pass",
"geetest_challenge": solution["geetest_challenge"],
"geetest_validate": solution["geetest_validate"],
"geetest_seccode": solution["geetest_seccode"]
})
print(f"Result: {login.status_code}")
Fehlerbehebung
| Fehler | Ursache | Beheben |
|---|---|---|
ERROR_BAD_PARAMETERS |
GT oder Challenge fehlen | Beides ist erforderlich – Auszug aus der Seite |
ERROR_CAPTCHA_UNSOLVABLE |
Die Herausforderung ist abgelaufen oder ungültig | Rufen Sie eine neue Herausforderung erneut von der Website ab |
| Lösung von der Website abgelehnt | Veralteter Herausforderungswert | Die Herausforderung liegt im Einmalgebrauch; Holen Sie sich für jeden Versuch ein neues |
geetest_validate ist leer |
Die Lösung ist intern fehlgeschlagen | Versuchen Sie es erneut mit einer neuen Herausforderung |
Vollständig lauffähiges Beispiel
Benötigen Sie ein vollständig funktionierendes Projekt mit Umgebungseinrichtung, Abfragen, Wiederholungsversuchen und Fehlerbehandlung?
Das vollständige ausführbare Beispiel finden Sie auf GitHub →
FAQ
Warum muss ich mir jedes Mal eine neue Herausforderung holen?
Der Wert challenge ist zur einmaligen Verwendung bestimmt. Sobald es verbraucht ist (sei es durch eine erfolgreiche Lösung oder einen Ablauf), wird es vom Backend der Site abgelehnt. Holen Sie sich vor jeder Lösung immer eine neue Herausforderung.
Was ist der api_server-Parameter?
Es gibt an, welcher GeeTest-Server die Überprüfung übernimmt. Übliche Werte sind api.geetest.com und api-na.geetest.com. Wenn die Site einen benutzerdefinierten Server verwendet, schließen Sie diesen in Ihre Anfrage ein.
Wie lange dauert die Lösung von GeeTest?
Normalerweise 15–30 Sekunden. Schieberätsel und Symbolherausforderungen dauern ähnlich lange.
Kann ich GeeTest v4 mit dieser Methode lösen?
Nein. GeeTest v4 verwendet ein anderes Protokoll. Überprüfen Sie, ob CaptchaAI die spezifische GeeTest-Version auf der Site unterstützt.
Was ist der Unterschied zwischen GeeTest-Folien- und Klick-Challenges?
GeeTest v3 verfügt über mehrere Herausforderungstypen (Folie, Symbolklick, Wortübereinstimmung), aber die API-Parameter und der Ablauf sind identisch. CaptchaAI behandelt alle v3-Typen transparent.
Verwandte Leitfäden
- GeeTest v3 Challenge-Response-Workflow
- Häufige GeeTest v3-Fehler und Korrekturen
- GeeTest vs. reCAPTCHA
Diskussionen (0)
Beteiligen Sie sich an der Unterhaltung
Melden Sie sich an, um Ihre Meinung zu teilen.
AnmeldenNoch keine Kommentare.