GeeTest v4 traz mudanças significativas na arquitetura, tipos de desafios e padrões de integração em comparação com a v3. Este guia explica o que mudou e como resolver os desafios da v4.
GeeTest v3 vs v4 – Principais diferenças
| Recurso | GeeTest v3 | GeeTest v4 |
|---|---|---|
| Inicialização | gt + challenge do servidor |
Somente captcha_id |
| Parâmetro de desafio | Obrigatório para chamada de API | Gerado do lado do cliente |
| Tipos de desafio | Deslize, clique | Deslizar, clicar, selecionar ícone, raciocínio espacial |
| Validação | Servidor retorna challenge |
Usa lot_number + pass_token |
| Ponto de extremidade da API | api.geetest.com |
gcaptcha4.geetest.com |
| Escala de dificuldade | Corrigido | Pontuação de risco adaptativa |
Extraindo Parâmetros 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://staging.example.com/qa-login")
print(f"Captcha ID: {params['captcha_id']}")
print(f"Is v4: {params['is_v4']}")
Resolvendo GeeTest v4 com 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://staging.example.com/qa-login",
)
print(f"Solution: {solution}")
Injetando solução 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)
Tipos de desafio v4
Quebra-cabeça de slides
O clássico desafio de deslizar para combinar. O usuário arrasta uma peça do quebra-cabeça.
Clique em Seleção
O usuário clica em objetos específicos (por exemplo, “clique em todas as faces”). Usa reconhecimento de ícone.
Raciocínio Espacial
Novidade na v4 — o usuário organiza as formas em um padrão espacial. Mais complexo que v3.
Correspondência de ícones
O usuário corresponde aos ícones mostrados em sequência. Mais difícil de automatizar manualmente.
CaptchaAI lida com todos os tipos de desafio v4 — a API abstrai a lógica específica do desafio.
Solução de problemas
| Problema | Causa | Correção |
|---|---|---|
ERROR_WRONG_CAPTCHA_ID |
Usando o valor v3 gt em vez de v4 captcha_id |
Verifique a página do script gcaptcha4 para confirmar v4 |
| Solução rejeitada | Parâmetro version=4 ausente |
Sempre especifique version: "4" para v4 |
captcha_id não encontrado |
Renderizado em JavaScript | Use Selenium para extrair da página renderizada |
| Erro no formato do token | Analisando string em vez de JSON | Analise a solução como JSON para obter tokens individuais |
Perguntas frequentes
Como posso saber se um site usa GeeTest v3 ou v4?
Procure gcaptcha4.geetest.com ou gt4.js no código-fonte da página para v4. Se você vir api.geetest.com e um parâmetro challenge, é v3.
GeeTest v4 é mais difícil de resolver do que v3?
Para solucionadores automatizados, não. CaptchaAI lida com ambas as versões. A dificuldade adaptativa da V4 afeta o atrito do usuário final, mas não a solução baseada em API.
Qual é a taxa de sucesso do GeeTest v4?
CaptchaAI relata taxa de sucesso de 100% para desafios GeeTest, consistente em v3 e v4.
Guias Relacionados
- Guia de parâmetros de slide GeeTest
- GeeTest vs Cloudflare Turnstile
Resolva os desafios GeeTest v4 -comece com CaptchaAI.