Перейти к основному содержимому
Возникают проблемы с получением токена?
Свяжитесь с поддержкой

reCAPTCHA v2

Объект содержит данные о задаче на решение reCAPTCHA v2 от Google. Для обеспечения универсальности решения этого вида капчи нам необходимо использовать все данные, которые вы используете во время автоматизации заполнения формы на целевом сайте, включая прокси, UserAgent браузера и cookies. Это позволит избежать любых проблем при изменении Google кода своей капчи.

Капча может решаться довольно долго по сравнению с обычной капчей, но это компенсируется тем, что полученный g-recaptcha-response действует еще 60 секунд после решения капчи.

Ещё больше по теме в нашем блоге
Внимание!

CapMonster Cloud по умолчанию использует встроенные прокси, подходящие для большинства сайтов. Однако если токен не принимается целевым сайтом, повторите попытку с собственными прокси (RecaptchaV2Task при использовании прокси). Используйте одни и те же прокси при решении и последующей отправке токена на сайт.

  • При авторизации по IP добавьте 65.21.190.34 в белый список.

  • Если токен reCAPTCHA v2 по-прежнему не принимается — обратитесь в техническую поддержку.

Параметры запроса

type<string>required

RecaptchaV2Task


websiteURL<string>required

Адрес страницы, на которой решается капча.


websiteKey<string>required

Ключ-идентификатор ReCaptcha2 на целевой странице.
<div class="g-recaptcha" data-sitekey="THIS_ONE"></div>


recaptchaDataSValue<string>optional

Некоторые реализации виджета ReCaptcha2 могут содержать дополнительный параметр "data-s" в div'е ReCaptcha2, который является одноразовым токеном и должен собираться каждый раз при решении ReCaptcha2.
<div class="g-recaptcha" data-sitekey="some sitekey" data-s="THIS_ONE"></div>


userAgent<string>optional

User-Agent браузера, используемый в эмуляции. Необходимо использовать подпись современного браузера, иначе Google будет возвращать ошибку, требуя обновить браузер.


cookies<string>optional

Дополнительные cookies, которые мы должны использовать во время взаимодействия с целевой страницей.

Формат: cookiename1=cookievalue1; cookiename2=cookievalue2


isInvisible<bool>optional

true, если капча невидимая, т.е. имеет скрытое поле для подтверждения, чекбокс отсутствует. При подозрении на бота вызывается дополнительная проверка.


proxyType<string>optional

http - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.


proxyAddress<string>optional

IP адрес прокси IPv4/IPv6. Не допускается:

  • использование прозрачных прокси (там где можно видеть IP клиента);
  • использование прокси на локальных машинах.


proxyPort<integer>optional

Порт прокси.


proxyLogin<string>optional

Логин прокси-сервера.


proxyPassword<string>optional

Пароль прокси-сервера.

Метод создания задачи

POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey":"API_KEY",
"task": {
"type":"RecaptchaV2Task",
"websiteURL":"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey":"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}

Ответ

{
"errorId":0,
"taskId":407533072
}

Метод получения результата задачи

Внимание!

На некоторых сайтах важно, чтобы UserAgent совпадал с тем, что использовался при решении капчи. Поэтому, если вместе с токеном CapMonster Cloud возвращает UserAgent, обязательно применяйте его при отправке формы или подтверждении решения на целевой странице.

Используйте метод getTaskResult чтобы получить решение ReCaptcha2. В зависимости от загрузки системы вы получите ответ через время от 100 мс.

POST
https://api.capmonster.cloud/getTaskResult

Запрос

{
"clientKey":"API_KEY",
"taskId": 407533072
}

Ответ

{
"errorId": 0,
"status":"ready",
"solution": {
"gRecaptchaResponse":"3AHJ_VuvYIBNBW5yyv0zRYJ75VkOKvhKj9_xGBJKnQimF72rfoq3Iy-DyGHMwLAo6a3"
}
}

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

{
"errorId": 0,
"status": "ready",
"solution": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
"gRecaptchaResponse": "0cAFcWeA5Y3...hF8UWA",
"cookies": {
"nocookies": "true"
}
}
}

СвойствоТипОписание
gRecaptchaResponseStringХеш, который необходимо подставить в форму с ReCaptcha2 в <textarea id="g-recaptcha-response" ..></textarea>. Имеет длину от 500 до 2190 байт.

Как найти все нужные параметры для создания задачи на решение

Вручную

  1. Откройте ваш сайт, где отображается капча, в браузере.
  2. Правой кнопкой кликните по элементу капчи и выберите Inspect.

websiteKey (data-sitekey)

Вкладка Elements: элемент <div class="g-recaptcha"> на странице. Скопируйте значение атрибута data-sitekey, например:

sitekey

Вкладка Networks:

Откройте вкладку Networks и перезагрузите страницу с капчей. Найдите похожий запрос (значение k – это и есть data-sitekey):

sitekey1

recaptchaDataSValue (если используется)

Если на странице есть атрибут data-s, найдите его в HTML:

datas

isInvisible

Вкладка Networks: если капча невидимая, в элементе будет атрибут size="invisible", например:

isinvisible

Автоматически

Для автоматизации поиска параметров их можно извлекать через браузер (обычный или headless, например, с Playwright) или напрямую из HTTP-запросов. Поскольку значения динамических параметров действуют недолго, их рекомендуется использовать сразу после получения.

Важно!

Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых HTML-элементов и селекторов.

Показать код (для браузера)
(() => {
const iframeEl = document.querySelector('iframe[src^="https://www.google.com/recaptcha/api2/anchor?"]');
const captchaUrl = iframeEl?.getAttribute('src');

if (captchaUrl) {
const urlParams = new URLSearchParams(captchaUrl.split('?')[1]);

const sitekey = urlParams.get('k');
const size = urlParams.get('size');

const isInvisible = size === 'invisible';

const sitekeyEl = document.querySelector('[data-sitekey]');
const datasEl = document.querySelector('[data-s]');
const datas = datasEl?.getAttribute('data-s');

console.log({
sitekey: sitekey || sitekeyEl?.getAttribute('data-sitekey'),
datas,
isInvisible
});
}
})();
Показать код (Node.js)
import { chromium } from "playwright";

(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();

await page.goto("https://example.com");

await page.waitForSelector('iframe[src^="https://www.google.com/recaptcha/api2/anchor?"]');

const captchaData = await page.evaluate(() => {
const iframeEl = document.querySelector('iframe[src^=
"https://www.google.com/recaptcha/api2/anchor?"]');
const captchaUrl = iframeEl?.getAttribute("src");

if (captchaUrl) {
const urlParams = new URLSearchParams(captchaUrl.split("?")[1]);
const sitekey = urlParams.get("k");
const size = urlParams.get("size");
const isInvisible = size === "invisible";

const sitekeyEl = document.querySelector("[data-sitekey]");
const datasEl = document.querySelector("[data-s]");
const datas = datasEl?.getAttribute("data-s");

return {
sitekey: sitekey || sitekeyEl?.getAttribute("data-sitekey"),
datas,
isInvisible,
};
}
return null;
});

console.log(captchaData);
await browser.close();
})();

Используйте библиотеку SDK

Показать код (для браузера)
// https://github.com/ZennoLab/capmonstercloud-client-js

import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request }
from '@zennolab_com/capmonstercloud-client';

document.addEventListener('DOMContentLoaded', async () => {

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// При необходимости можно проверить баланс
const balance = await cmcClient.getBalance();
console.log("Balance:", balance);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let recaptchaV2Request = new RecaptchaV2Request({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey: "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
});

// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси

/*
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

recaptchaV2Request = new RecaptchaV2Request({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey: "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await cmcClient.Solve(recaptchaV2Request);
console.log("Solution:", result);
});
Показать код (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

async function solveRecaptchaV2() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let recaptcha2Request = new RecaptchaV2Request({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey: "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
});

// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси

/*
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

recaptcha2Request = new RecaptchaV2Request({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey: "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

const result = await client.Solve(recaptcha2Request);
console.log("Solution:", result);
}

solveRecaptchaV2().catch(console.error);
Ещё больше по теме в нашем блоге