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
- Guide des paramètres de diapositive GeeTest
- GeeTest et Cloudflare Turnstile
Résolvez les défis GeeTest v4 —commencer par CaptchaAI.