API-Tutorials

So lösen Sie GeeTest v3 mithilfe der API

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“.

  1. Öffnen Sie die Registerkarte „DevTools → Netzwerk
  2. Filtern Sie nach register-slide oder gettype.php oder get.php
  3. Lösen Sie das Captcha aus und suchen Sie nach der Initialisierungsanforderung
  4. Die Antwort enthält gt, challenge und manchmal api_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

Diskussionen (0)

Noch keine Kommentare.