Hintergründe

GeeTest v4 vs. v3: Was sich ändert und wie Sie CAPTCHAs lösen

Die wichtigste Antwort vorweg: CaptchaAI löst heute GeeTest v3 zuverlässig – die Unterstützung für GeeTest v4 ist bald verfügbar, aber noch nicht freigeschaltet. Wer eine Seite mit GeeTest v4 automatisieren will, sollte deshalb zuerst die Version sicher erkennen und die neue Architektur verstehen. Dieser Leitfaden zeigt, was sich zwischen v3 und v4 geändert hat, wie Sie beide Versionen im Seitenquelltext auseinanderhalten und wie der Integrationsweg aussieht.


GeeTest v3 oder v4? So erkennen Sie die Version

Die schnellste Prüfung ist ein Blick in den Seitenquelltext. GeeTest v4 lädt das Skript von gcaptcha4.geetest.com oder bindet gt4.js ein und arbeitet mit einer captcha_id. Sehen Sie dagegen api.geetest.com, einen challenge-Parameter und einen gt-Wert, handelt es sich um v3. Diese Unterscheidung entscheidet, welche Parameter Sie extrahieren und welchen Integrationsweg Sie einschlagen.

Merkmal GeeTest v3 GeeTest v4
Initialisierung gt + challenge vom Server nur captcha_id
Abfrageparameter für den API-Aufruf erforderlich clientseitig generiert
Abfragetypen Schieben, Klicken Schieben, Klicken, Symbolauswahl, räumliche Anordnung
Validierung Server gibt challenge zurück nutzt lot_number + pass_token
API-Endpunkt api.geetest.com gcaptcha4.geetest.com
Schwierigkeitsgrad fest adaptive Risikobewertung

Praktisch bedeutet dieser Umbau: v3 lieferte gt und challenge direkt vom Server, sodass Sie beide Werte vor dem API-Aufruf auslesen konnten. v4 generiert die Abfrage clientseitig und identifiziert die Instanz nur noch über captcha_id. Die Validierung läuft nicht mehr über einen zurückgegebenen challenge-Wert, sondern über die Token lot_number und pass_token. Wer von v3 kommt, muss vor allem die Parameterextraktion und das Einfügen der Ergebnis-Token neu denken.

Ein typisches Szenario aus der Praxis: Ein Berliner Entwickler betreibt ein Preis-Monitoring für ein Reiseportal und stößt beim Login plötzlich auf GeeTest v4 statt v3. Bevor er die Automatisierung anpasst, muss er zuverlässig feststellen, welche Version aktiv ist – und beim Verarbeiten personenbezogener Daten wie IP-Adressen die DSGVO-Grundlagen im Blick behalten. Für den Betrieb der Worker eignen sich lokale Anbieter wie Hetzner oder netcup ebenso wie AWS Lambda.


GeeTest-v4-Parameter aus der Seite extrahieren

Die captcha_id steckt im gerenderten HTML. Da GeeTest per JavaScript nachlädt, reicht ein einfacher HTTP-Request oft nicht – ein Headless-Browser wie Selenium liefert den vollständigen Seitenquelltext. Das folgende Skript liest die captcha_id per Regex aus und bestätigt zugleich, ob es sich um v4 handelt:

# 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']}")

GeeTest v4 mit CaptchaAI lösen – bald verfügbar

Die Unterstützung für GeeTest v4 steht auf der Roadmap von CaptchaAI und ist noch nicht allgemein verfügbar; sie lässt sich derzeit nur als „bald verfügbar“ beschreiben. Bis dahin nutzen Sie GeeTest v3, das CaptchaAI heute mit hoher Erfolgsquote löst. Der folgende Code zeigt den geplanten v4-Ablauf, damit Sie vorbereitet sind – die Abrechnung erfolgt dabei Thread-basiert: Jeder Plan (ab BASIC mit 15 $/Monat und 5 Threads) enthält unbegrenzte Lösungen pro Thread, sodass die Kosten auch bei hohem Scraping-Volumen planbar bleiben.

# 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}")

Die Lösung in das Formular einfügen

Nach dem Lösen müssen die Validierungs-Token zurück in das Formular. GeeTest v4 erwartet lot_number, pass_token, gen_time und captcha_output als versteckte Felder. Das folgende Skript legt fehlende Felder an, füllt sie und stößt bei Bedarf den Validierungs-Callback an:

# 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)

Typische Fehler und ihre Behebung

Die meisten Probleme entstehen dadurch, dass ein v3-Ablauf unverändert auf eine v4-Seite trifft. Diese Tabelle fasst die häufigsten Fälle zusammen:

Problem Ursache Behebung
ERROR_WRONG_CAPTCHA_ID Es wird der v3-Wert gt statt des v4-Werts captcha_id verwendet Seite auf das Skript gcaptcha4 prüfen, um v4 zu bestätigen
Lösung abgelehnt Parameter version=4 fehlt Für v4 immer version: "4" angeben
captcha_id nicht gefunden wird per JavaScript gerendert mit Selenium aus der gerenderten Seite extrahieren
Fehler im Token-Format String wird geparst statt JSON Lösung als JSON parsen, um die einzelnen Token zu erhalten

Die Abfragetypen von GeeTest v4

GeeTest v4 kombiniert mehrere Abfragetypen und wählt je nach Risikobewertung dynamisch aus:

  • Schiebepuzzle: die klassische Slide-to-Match-Abfrage – der Nutzer zieht ein Puzzleteil an die passende Stelle.
  • Klick-Auswahl: der Nutzer klickt bestimmte Objekte an (etwa „alle Gesichter anklicken“) – beruht auf Symbolerkennung.
  • Räumliche Anordnung: neu in v4 – der Nutzer ordnet Formen in einem räumlichen Muster an, deutlich komplexer als in v3.
  • Symbol-Abgleich: der Nutzer gleicht Symbole ab, die in einer Sequenz erscheinen – manuell schwerer zu automatisieren.

Sobald die v4-Unterstützung ausgeliefert ist, abstrahiert die CaptchaAI-API die abfragespezifische Logik. Heute löst CaptchaAI GeeTest v3; die v4-Unterstützung ist bald verfügbar.


Häufige Fragen

Kann CaptchaAI GeeTest v4 schon lösen?

Nein, noch nicht. GeeTest v4 steht auf der Roadmap und ist „bald verfügbar“, aber noch nicht freigeschaltet. Heute löst CaptchaAI GeeTest v3 mit hoher Erfolgsquote; sobald v4 startet, funktioniert die Integration über dieselbe in.php-Schnittstelle.

Muss ich meinen bestehenden GeeTest-v3-Code für v4 anpassen?

Teilweise. Die Übermittlung bleibt gleich, aber v4 liefert andere Validierungs-Token (lot_number, pass_token, gen_time, captcha_output) statt eines einzelnen challenge-Werts. Planen Sie das Einfügen dieser Felder ins Formular jetzt schon ein, dann bleibt der spätere Wechsel minimal.

Was bedeutet die adaptive Risikobewertung von GeeTest v4?

GeeTest v4 passt die Schwierigkeit dynamisch an das wahrgenommene Risiko einer Sitzung an. Das erhöht vor allem die Reibung für Endnutzer; für eine API-basierte Lösung ist wichtiger, dass Sie die Version korrekt erkennen und die richtigen Parameter übergeben.

Ist das Automatisieren von GeeTest-CAPTCHAs beim Scraping in der DACH-Region zulässig?

Das hängt vom Einzelfall ab. Prüfen Sie die Nutzungsbedingungen der Zielseite und – sobald personenbezogene Daten wie IP-Adressen im Spiel sind – Ihre Rechtsgrundlage nach DSGVO. CaptchaAI löst die CAPTCHA-Abfrage; die rechtliche Bewertung Ihres Datenflusses bleibt Ihre Verantwortung.


Verwandte Leitfäden


GeeTest v3 heute lösen – jetzt mit CaptchaAI starten. Die Unterstützung für GeeTest v4 ist bald verfügbar.

Kommentare sind für diesen Artikel deaktiviert.