Получить API ключ

Как использовать полученный токен

После того как getTaskResult вернул status: "ready" и решение в solution, токен нужно доставить на сайт. Ниже способы доставки разделены по типу капчи.

Важно: наш сервис предоставляет только решение капчи — сам токен (или, в случае GeeTest, набор значений validate/seccode/captcha_output). Способ, которым этот токен нужно передать на целевой сайт, лежит полностью на стороне заказчика: у каждого сайта своя реализация — где-то это скрытое поле формы, где-то callback-функция, где-то оба варианта сразу или что-то ещё более нестандартное. Мы не можем заранее знать, как конкретный сайт ожидает получить токен, поэтому подходящий способ доставки нужно определять самостоятельно — как правило, через анализ разметки страницы и вкладку Network в инструментах разработчика при ручном прохождении капчи. Ниже — только наиболее распространённые варианты для каждого типа капчи, но на конкретном сайте может быть реализовано иначе.

reCAPTCHA v2 / v3#

Для reCAPTCHA v2 и v3 используются:

Способ Что используется
Скрытое поле формы g-recaptcha-response
JS-объект/callback grecaptcha.getResponse() заменяется значением токена; либо вызывается callback, заданный в data-callback

Способ 1 — через скрытое поле формы#

Большинство сайтов кладут токен в скрытый <input> внутри формы и просто отправляют форму. Найдите соответствующее поле в DOM и подставьте значение перед сабмитом:

<textarea id="g-recaptcha-response" name="g-recaptcha-response"></textarea>
document.querySelector('#g-recaptcha-response').value = 'ТОКЕН_ИЗ_SOLUTION';
document.querySelector('form').submit();

Способ 2 — через callback-функцию#

Если виджет инициализирован с data-callback (или JS-параметром callback в grecaptcha.render()), сайт ожидает не сабмит формы, а вызов этой функции с токеном в качестве аргумента. Имя функции у каждого сайта своё — его нужно смотреть в разметке (data-callback="onCaptchaSolved") или в JS-инициализации виджета:

// reCAPTCHA v2/v3 с callback
onCaptchaSolved('ТОКЕН_ИЗ_SOLUTION');

Перед тем как выбирать способ, откройте вкладку Network в инструментах разработчика браузера и пройдите капчу вручную — это покажет, отправляется ли токен как поле формы (POST с g-recaptcha-response в теле) или передаётся в JS-callback без явной отправки формы.

Cloudflare Turnstile#

Для Turnstile используются:

Способ Что используется
Скрытое поле формы cf-turnstile-response
JS-объект/callback callback, заданный в data-callback виджета Turnstile или в параметре callback объекта turnstile.render()

Способ 1 — через скрытое поле формы#

Большинство сайтов кладут токен в скрытый <input> внутри формы и просто отправляют форму. Найдите соответствующее поле в DOM и подставьте значение перед сабмитом:

<input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
document.querySelector('#cf-turnstile-response').value = 'ТОКЕН_ИЗ_SOLUTION';
document.querySelector('form').submit();

Способ 2 — через callback-функцию#

Если виджет инициализирован с data-callback (или JS-параметром callback в turnstile.render()), сайт ожидает не сабмит формы, а вызов этой функции с токеном в качестве аргумента. Имя функции у каждого сайта своё — его нужно смотреть в разметке (data-callback="onTurnstileSolved") или в JS-инициализации виджета:

// Turnstile с callback
onTurnstileSolved('ТОКЕН_ИЗ_SOLUTION');

Перед тем как выбирать способ, откройте вкладку Network в инструментах разработчика браузера и пройдите капчу вручную — это покажет, отправляется ли токен как поле формы (POST с cf-turnstile-response в теле) или передаётся в JS-callback без явной отправки формы.

GeeTest v3#

Виджет v3 инициализируется через initGeetest, а после прохождения капчи обычно вызывается метод onSuccess объекта капчи, из которого забирается результат методом getValidate(). Чтобы подставить решение с нашего сервиса, нужно перехватить объект капчи на этапе инициализации и вызвать onSuccess вручную, подменив getValidate() так, чтобы он возвращал значения из solution:

// Пример перехвата инициализации GeeTest v3
window.initGeetest = ((original) => (config, callback) => {
  original(config, (captchaObj) => {
    captchaObj.getValidate = () => ({
      geetest_challenge: 'ЗНАЧЕНИЕ_challenge_ИЗ_SOLUTION',
      geetest_validate: 'ЗНАЧЕНИЕ_validate_ИЗ_SOLUTION',
      geetest_seccode: 'ЗНАЧЕНИЕ_seccode_ИЗ_SOLUTION'
    });
    callback(captchaObj);
  });
})(window.initGeetest);

Точное имя callback-метода и структура объекта капчи зависят от того, как конкретный сайт обернул стандартный виджет GeeTest — ориентируйтесь на разметку и код инициализации на странице.

GeeTest v4#

Виджет v4 инициализируется через initGeetest4, а результат прохождения передаётся в callback (обычно onSuccess) в виде объекта с полями lot_number, pass_token, gen_time, captcha_output. Аналогично v3, чтобы использовать решение с нашего сервиса, нужно перехватить инициализацию и подменить возвращаемый результат значениями из solution:

// Пример перехвата инициализации GeeTest v4
window.initGeetest4 = ((original) => (config, callback) => {
  original(config, (captchaObj) => {
    captchaObj.onSuccess = () => {
      callback({
        lot_number: 'ЗНАЧЕНИЕ_lot_number_ИЗ_SOLUTION',
        pass_token: 'ЗНАЧЕНИЕ_pass_token_ИЗ_SOLUTION',
        gen_time: 'ЗНАЧЕНИЕ_gen_time_ИЗ_SOLUTION',
        captcha_output: 'ЗНАЧЕНИЕ_captcha_output_ИЗ_SOLUTION'
      });
    };
  });
})(window.initGeetest4);

Как и в остальных случаях, конкретная реализация зависит от сайта: часть сайтов ожидает эти значения в скрытых полях формы перед сабмитом, часть — только через callback. Проверяйте оба варианта через Network и код страницы, прежде чем выбирать способ.