GeeTest v4 trae cambios significativos en la arquitectura, los tipos de desafíos y los patrones de integración en comparación con la versión 3. Esta guía explica qué cambió y cómo resolver los desafíos de la versión 4.
GeeTest v3 vs v4: diferencias clave
| Característica | GeeTest v3 | GeeTest v4 |
|---|---|---|
| Inicialización | gt + challenge del servidor |
Sólo captcha_id |
| Parámetro de desafío | Requerido de la llamada API | Del lado del cliente generado |
| Tipos de desafíos | Deslizar, hacer clic | Deslizar, hacer clic, seleccionar icono, razonamiento espacial |
| Validación | El servidor devuelve challenge |
Utiliza lot_number + pass_token |
| Punto final API | api.geetest.com |
gcaptcha4.geetest.com |
| Escala de dificultad | Fijo | Puntuación de riesgo adaptativa |
Extracción de 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']}")
Resolviendo GeeTest v4 con 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}")
Inyectar solución 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 desafíos v4
Rompecabezas de diapositivas
El clásico desafío de deslizar para combinar. El usuario arrastra una pieza del rompecabezas.
Haga clic en Selección
El usuario hace clic en objetos específicos (por ejemplo, "haga clic en todas las caras"). Utiliza reconocimiento de iconos.
Razonamiento espacial
Nuevo en v4: el usuario organiza las formas en un patrón espacial. Más complejo que v3.
Coincidencia de iconos
El usuario hace coincidir los iconos que se muestran en una secuencia. Es más difícil de automatizar manualmente.
CaptchaAI maneja todos los tipos de desafíos v4: la API abstrae la lógica específica del desafío.
Solución de problemas
| Problema | causa | Solución |
|---|---|---|
ERROR_WRONG_CAPTCHA_ID |
Usando el valor v3 gt en lugar de v4 captcha_id |
Consulte la página del script gcaptcha4 para confirmar la v4 |
| Solution rejected | Falta el parámetro version=4 |
Especifique siempre version: "4" para v4 |
captcha_id no encontrado |
renderizado en JavaScript | Utilice Selenium para extraer de la página renderizada |
| Error de formato de token | Analizando cadena en lugar de JSON | Analizar la solución como JSON para obtener tokens individuales |
Preguntas frecuentes
¿Cómo sé si un sitio usa GeeTest v3 o v4?
Busque gcaptcha4.geetest.com o gt4.js en la fuente de la página para v4. Si ve api.geetest.com y un parámetro challenge, es v3.
¿GeeTest v4 es más difícil de resolver que v3?
Para solucionadores automatizados, no. CaptchaAI maneja ambas versiones. La dificultad adaptativa de V4 afecta la fricción del usuario final pero no la resolución basada en API.
¿Cuál es la tasa de éxito de GeeTest v4?
CaptchaAI informa una tasa de éxito del 100 % para los desafíos de GeeTest, consistente en las versiones 3 y 4.
Guías relacionadas
- Guía de parámetros de diapositivas GeeTest
- GeeTest y Cloudflare Turnstile
Resolver desafíos GeeTest v4 -empezar con CaptchaAI.