Explications Techniques

Guide de modification et de résolution du CAPTCHA GeeTest v4

GeeTest v4 apporte des changements significatifs dans l'architecture, les types de défis et les modèles d'intégration par rapport à la v3. Ce guide explique ce qui a changé et comment résoudre les défis de la v4.


GeeTest v3 vs v4 — Différences clés

Caractéristique GeeTest v3 GeeTest v4
Initialisation gt + challenge du serveur captcha_id uniquement
Paramètre de défi Obligatoire à partir de l'appel API Généré côté client
Types de défis Faites glisser, cliquez Glisser, cliquer, sélectionner une icône, raisonner dans l'espace
Validation Le serveur renvoie challenge Utilise lot_number + pass_token
Point de terminaison de l'API api.geetest.com gcaptcha4.geetest.com
Difficulté à évoluer Corrigé Notation adaptative des risques

Extraction des paramètres GeeTest v4

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

Résoudre GeeTest v4 avec 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}")

Injection de la solution GeeTest v4

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

Types de défis v4

Puzzle coulissant

Le défi classique du slide-to-match. L'utilisateur fait glisser une pièce du puzzle.

Cliquez sur Sélection

L'utilisateur clique sur des objets spécifiques (par exemple, "cliquez sur toutes les faces"). Utilise la reconnaissance des icônes.

Raisonnement spatial

Nouveau dans la version 4 : l'utilisateur organise les formes selon un modèle spatial. Plus complexe que la v3.

Correspondance des icônes

L'utilisateur fait correspondre les icônes affichées dans une séquence. Plus difficile à automatiser manuellement.

CaptchaAI gère tous les types de défis v4 : l'API élimine la logique spécifique au défi.


Dépannage

Problème Parce que Corriger
ERROR_WRONG_CAPTCHA_ID Utilisation de la valeur v3 gt au lieu de v4 captcha_id Vérifiez la page du script gcaptcha4 pour confirmer la v4.
Solution rejetée Paramètre version=4 manquant Spécifiez toujours version: "4" pour la v4
captcha_id introuvable Rendu JavaScript Utilisez Selenium pour extraire de la page rendue
Erreur de format de jeton Analyser la chaîne au lieu de JSON Analyser la solution en JSON pour obtenir des jetons individuels

FAQ

Comment savoir si un site utilise GeeTest v3 ou v4 ?

Recherchez gcaptcha4.geetest.com ou gt4.js dans la source de la page pour la v4. Si vous voyez api.geetest.com et un paramètre challenge, il s'agit de la v3.

GeeTest v4 est-il plus difficile à résoudre que la v3 ?

Pour les solveurs automatisés, non. CaptchaAI gère les deux versions. La difficulté adaptative de la V4 affecte les frictions de l'utilisateur final, mais pas la résolution basée sur l'API.

Quel est le taux de réussite pour GeeTest v4 ?

CaptchaAI rapporte un taux de réussite de 100 % pour les défis GeeTest, cohérent entre les versions 3 et 4.


Guides connexes


Résolvez les défis GeeTest v4 —commencer par CaptchaAI.

Les commentaires sont désactivés pour cet article.