GeeTest v4 вносит существенные изменения в архитектуру, типы задач и шаблоны интеграции по сравнению с версией 3. В этом руководстве объясняется, что изменилось и как решить проблемы версии 4.
GeeTest v3 против v4 — ключевые различия
| Особенность | GeeTest v3 | GeeTest v4 |
|---|---|---|
| Инициализация | gt + challenge с сервера |
Только captcha_id |
| Параметр вызова | Требуется для вызова API | Сгенерировано на стороне клиента |
| Типы испытаний | Слайд, клик | Скольжение, щелчок, выбор значка, рассуждение в пространстве |
| Валидация | Сервер возвращает challenge |
Использует lot_number + pass_token. |
| конечная точка API | api.geetest.com |
gcaptcha4.geetest.com |
| Масштабирование сложности | Зафиксированный | Адаптивная оценка рисков |
Извлечение параметров 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://https://staging.example.com/qa-login")
print(f"Captcha ID: {params['captcha_id']}")
print(f"Is v4: {params['is_v4']}")
Решение GeeTest v4 с помощью 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://https://staging.example.com/qa-login",
)
print(f"Solution: {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)
Типы испытаний v4
Слайд-головоломка
Классическая задача «Слайд-соответствие». Пользователь перетаскивает кусочек головоломки.
Нажмите «Выбор»
Пользователь щелкает определенные объекты (например, «щелкнуть все лица»). Использует распознавание значков.
Космическое мышление
Новое в версии 4 — пользователь располагает фигуры в пространственном порядке. Более сложный, чем v3.
Иконка Матч
Пользователь сопоставляет значки, показанные в последовательности. Сложнее автоматизировать вручную.
CaptchaAI обрабатывает все типы задач версии 4 — API абстрагирует логику, специфичную для задачи.
Поиск неисправностей
| Проблема | Причина | Исправить |
|---|---|---|
ERROR_WRONG_CAPTCHA_ID |
Использование значения v3 gt вместо v4 captcha_id. |
Проверьте страницу на наличие скрипта gcaptcha4, чтобы подтвердить версию 4. |
| Решение отклонено | Отсутствует параметр version=4. |
Всегда указывайте version: "4" для версии 4. |
captcha_id не найден |
JavaScript-рендеринг | Используйте Selenium для извлечения из отображаемой страницы |
| Ошибка формата токена | Разбор строки вместо JSON | Разобрать решение как JSON, чтобы получить отдельные токены |
Часто задаваемые вопросы
Как узнать, использует ли сайт GeeTest v3 или v4?
Найдите gcaptcha4.geetest.com или gt4.js в исходном коде страницы для версии 4. Если вы видите api.geetest.com и параметр challenge, это версия v3.
GeeTest v4 решить сложнее, чем v3?
Для автоматических решателей нет. CaptchaAI поддерживает обе версии. Адаптивная сложность V4 влияет на трудности конечного пользователя, но не влияет на решение на основе API.
Каков процент успеха GeeTest v4?
CaptchaAI сообщает о 100% успешности выполнения задач GeeTest, одинаковой для версий 3 и 4.
Связанные руководства
- Руководство по параметрам слайдов GeeTest
- GeeTest против Cloudflare Turnstile
Решайте задачи GeeTest v4 —начни с CaptchaAI.