Get API Key

How to use token

После того как getTaskResult вернул status: "ready" и решение в solution, токен нужно доставить на сайт. Ниже способы доставки разделены по типу капчи. Coordinates (CoordinatesTask) здесь не рассматривается - он возвращает координаты клика, а не токен, поэтому доставлять на страницу нечего: вы (или ваша автоматизация) кликаете по картинке в этих координатах.

Важно: наш сервис предоставляет только решение капчи — сам токен (или, в случае 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 без явной отправки формы.

Yandex SmartCaptcha#

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

Способ Что используется
Скрытое поле формы smart-token
JS-объект/callback callback, заданный в параметре callback объекта window.smartCaptcha.render()

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

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

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

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

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

// Yandex SmartCaptcha с callback
onSmartCaptchaSolved('ТОКЕН_ИЗ_SOLUTION');

Перед тем как выбирать способ, откройте вкладку Network в инструментах разработчика браузера и пройдите капчу вручную — это покажет, отправляется ли токен как поле формы (POST с smart-token в теле) или передаётся в 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 и код страницы, прежде чем выбирать способ.

Tencent#

Виджет инициализируется через конструктор TencentCaptcha, а результат доставляется в callback-функцию, переданную вторым аргументом:

new TencentCaptcha(CaptchaAppId, myCallbackFunction, options);

Чтобы подставить решение с нашего сервиса, вызовите эту же callback-функцию с объектом, собранным из полей solution (ret, ticket, randstr, appid):

myCallbackFunction({
  ret: 'ЗНАЧЕНИЕ_ret_ИЗ_SOLUTION',
  ticket: 'ЗНАЧЕНИЕ_ticket_ИЗ_SOLUTION',
  randstr: 'ЗНАЧЕНИЕ_randstr_ИЗ_SOLUTION',
  appid: 'ЗНАЧЕНИЕ_appid_ИЗ_SOLUTION'
});

Имя callback-функции задаёт сайт (myCallbackFunction выше — просто пример, например new TencentCaptcha('190014885', myCallbackFunction, {})) — смотрите его в коде инициализации капчи на странице. Обычно эта функция используется для отправки запроса на верификацию на бэкенд сайта.