Технические разборы

GeeTest v4 Руководство по изменению и решению CAPTCHA

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 v4 —начни с CaptchaAI.

Комментарии для этой статьи отключены.