Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как отличить GeeTest v3 от GeeTest v4

Грегори Фишер
Грегори Фишер

Технический специалист

Для обычного пользователя GeeTest v3 и v4 выглядят абсолютно одинаково: тот же слайдер-пазл, та же невидимая проверка поведения. Но для разработчика это две совершенно разные системы. Если вы попытаетесь скормить параметры от v3 виджету v4 (или наоборот), капча просто не сработает.

Самое обидное, что визуально, просто глядя на страницу, версию часто не определить. Придется заглянуть в код. Давайте разберемся, как за пару секунд понять, с какой версией вы имеете дело, и что именно от нее требуется.

Самый быстрый способ отличить

Откройте инструменты разработчика в браузере и посмотрите исходный код страницы или вкладку Сеть.

  • Это v3, если рядом со значением gt вы видите еще и challenge.
  • Это v4, если вы видите только captcha_id, а никакого challenge статически на странице нет.

Дополнительная подсказка: скрипт для v4 загружается с адреса gcaptcha4.geetest.com/load, и captcha_id часто передается прямо там, в URL, как query-параметр.

GeeTest v3: ключевые особенности и параметры

Версия v3 требует два значения:

  1. gt — статический ключ сайта, который почти никогда не меняется.
  2. challenge — динамическое значение, которое годится только для одного использования.

Главная ловушка v3: параметр challenge одноразовый. В тот момент, когда капча загрузилась на странице, этот конкретный challenge уже потрачен. Если вы попытаетесь использовать его повторно, API вернет ошибку истекшего токена вместо решения.

Это значит, что просто скопировать challenge один раз и закэшировать его не получится. Вам нужно перехватить сетевой запрос, который сама страница делает за свежим challenge, и повторять этот шаг перед каждой новой отправкой задачи.

Полный запрос к API для v3 выглядит так:

bash Copy
curl -X POST https://api.2captcha.com/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_API_KEY",
    "task": {
      "type": "GeeTestTaskProxyless",
      "websiteURL": "https://2captcha.com/demo/geetest",
      "gt": "81388ea1fc187e0c335c0a8907ff2625",
      "challenge": "2e2f0f65240058b683cb6ea21c303eea6n"
    }
  }'

Через Python SDK:

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')

result = solver.geetest(
    gt='81388ea1fc187e0c335c0a8907ff2625',
    challenge='2e2f0f65240058b683cb6ea21c303eea6n',
    url='https://2captcha.com/demo/geetest'
)

print(result)

В ответ вы получите набор из трех токенов: challenge, validate и seccode. Их нужно вставить в форму так же, как это сделал бы сам GeeTest после ручного решения. Обычно это скрытые поля с именами geetest_challenge, geetest_validate и geetest_seccode, хотя некоторые сайты вместо этого ждут вызова JavaScript-колбэка.

GeeTest v4: упрощенный формат и параметры

В версии v4 разработчики GeeTest избавились от необходимости использовать динамический challenge.

Всё, что теперь нужно, — это captcha_id. Это статический идентификатор, привязанный к сайту. Он не протухает и не меняется так, как challenge у v3. Это делает работу с v4 заметно проще: вам больше не нужно охотиться за сетевыми запросами. Достаточно один раз найти этот ID и спокойно использовать его снова и снова.

Запрос к API для v4:

bash Copy
curl -X POST https://api.2captcha.com/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_API_KEY",
    "task": {
      "type": "GeeTestTaskProxyless",
      "websiteURL": "https://2captcha.com/demo/geetest-v4",
      "version": 4,
      "initParameters": {
        "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"
      }
    }
  }'

Через Python SDK:

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')

result = solver.geetest_v4(
    captcha_id='e392e1d7fd421dc63325744d5a2b9c73',
    url='https://2captcha.com/demo/geetest-v4'
)

print(result)

Ответ выглядит совсем не так, как у v3. Вместо трех коротких токенов, v4 возвращает пять полей: captcha_id, lot_number, pass_token, gen_time и captcha_output. Все пять значений нужно доставить на целевую страницу — снова либо как скрытые поля формы, либо через колбэк, который ожидает JavaScript сайта.

Краткое сравнение

Характеристика GeeTest v3 GeeTest v4
Обязательные параметры gt, challenge captcha_id
Протухает ли значение? Да, challenge одноразовый Нет, captcha_id статический
Нужен ли доп. шаг? Да, нужно перехватывать свежий challenge из запросов страницы Нет, ID берется из кода один раз
Тип задачи в API GeeTestTaskProxyless / GeeTestTask GeeTestTaskProxyless / GeeTestTask (с параметром version: 4)
Возвращаемые токены challenge, validate, seccode captcha_id, lot_number, pass_token, gen_time, captcha_output
Типичные имена полей в форме geetest_challenge, geetest_validate, geetest_seccode lot_number, pass_token, gen_time, captcha_output

Важный нюанс с именами полей

Небольшой, но важный момент. Если вы читали старые гайды или сообщения на форумах, вы могли видеть, что токены ответа v3 назывались с префиксом geetest_ (например, geetest_challenge).

Это особенность старых эндпоинтов in.php и res.php. Современный API createTask и getTaskResult, а также актуальные SDK возвращают те же самые данные, но без префикса: просто challenge, validate и seccode.

Данные одни и те же, просто названия ключей в JSON отличаются в зависимости от того, какой частью API вы пользуетесь. Имейте это в виду, чтобы не тратить время на поиск поля, которого на самом деле нет в ответе.

Заключение

Разница между GeeTest v3 и v4 сводится к одному ключевому моменту: необходимость каждый раз добывать динамический challenge в третьей версии против использования статического captcha_id в четвертой. Пока внешне виджеты выглядят для пользователя идентично, под капотом они требуют принципиально разного подхода к интеграции.

Как только вы научитесь за пару секунд определять версию через исходный код страницы или сетевые запросы, процесс настройки перестанет быть методом проб и ошибок. Вы будете заранее знать, нужно ли настраивать перехват трафика, какие именно параметры готовить для отправки в API и в каком формате ждать ответные токены для внедрения в форму. Это превращает обход капчи из источника постоянных ошибок и таймаутов в четкий, надежный и полностью предсказуемый этап вашей автоматизации.

Полезные ссылки