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

reCAPTCHA v3

Внимание!

Задача выполняется через наши собственные прокси-серверы. Дополнительных расходов на прокси не требуется — их использование включено в стоимость.

Данный раздел содержит описание задачи для решения reCAPTCHA v3 от Google.

reCAPTCHA v3 работает полностью в фоновом режиме и не требует от пользователя выполнения каких-либо действий. Система анализирует поведенческие и технические сигналы посетителя страницы и формирует оценку риска для каждого запроса. На основе полученных данных сайт принимает решение о допустимости действия, используя рейтинг доверия, который обычно находится в диапазоне от 0.1 до 0.9.

При создании задачи желательно передавать два параметра - pageAction и minScore.

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

type<string>required

RecaptchaV3TaskProxyless


websiteURL<string>required

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


websiteKey<string>required

Ключ-идентификатор ReCaptcha3 на целевой странице.
https://www.google.com/recaptcha/api.js?render=THIS_ONE


minScore<double>optional

Может иметь значение от 0.1 до 0.9


pageAction<string>optional

Значение параметра action, которое передаётся виджетом ReCaptcha в Google и который при последующей верификации на сервере виден владельцу сайта. Указывайте этот параметр, если его значение отличается от значения по умолчанию: verify

Пример в html:
grecaptcha.execute('site_key', {action:'login_test'}).

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

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

Запрос

{
"clientKey":"API_KEY",
"task": {
"type":"RecaptchaV3TaskProxyless",
"websiteURL":"https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta",
"websiteKey":"6Le0xVgUAAAAAIt20XEB4rVhYOODgTl00d8juDob",
"minScore": 0.7,
"pageAction": "myverify"
}
}

Ответ

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

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

Внимание!

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

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

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Хеш, который необходимо подставить в форму с ReCaptcha3 в <textarea id="g-recaptcha-response" ></textarea>. Имеет длину от 500 до 2190 байт.

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

Вручную

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

websiteKey

Публичный ключ сайта (sitekey). Обычно его можно найти в подключаемом скрипте:

В Elements:

elements

Во вкладке Network:

network

pageAction

Название действия, передаваемое в grecaptcha.execute(). Например:​

action

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

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

Важно!

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

Показать код (в браузере)
(() => {
const originalGrecaptcha = window.grecaptcha;

if (!originalGrecaptcha || !originalGrecaptcha.execute) {
console.warn("grecaptcha.execute not found. Wait until it loads.");
return;
}

window.__extractedParams = null;

window.grecaptcha = {
...originalGrecaptcha,
execute: function(sitekey, config) {
console.log("Captured!");
console.log("sitekey:", sitekey);
console.log("action:", config?.action);
window.__extractedParams = {
sitekey,
action: config?.action
};

return originalGrecaptcha.execute(sitekey, config);
},
ready: originalGrecaptcha.ready
};

console.log("grecaptcha.execute is wrapped. Click the button - parameters will be captured.");
})();
Показать код (Node.js)
import { chromium } from "playwright";

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

const jsContents = [];

page.on("response", async (response) => {
try {
const url = response.url();
const ct = response.headers()["content-type"] || "";
if (ct.includes("javascript") || url.endsWith(".js")) {
const text = await response.text();
jsContents.push(text);
}
} catch (e) {}
});

const targetUrl = "https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta";
await page.goto(targetUrl, { timeout: 60000 });
await page.waitForTimeout(3000);

const inlineScripts = await page.$$eval("script:not([src])", (scripts) =>
scripts.map((s) => s.textContent)
);
jsContents.push(...inlineScripts);

const executeRegex =
/grecaptcha\.execute\(\s*['"]
(?<sitekey>[^'"]+)['"]\s*,\s*\{[^}]*action\s*:\s*['"](?<action>[^'"]+)['"]/i;

let foundSitekey = null;
let foundAction = null;

for (const js of jsContents) {
const match = js.match(executeRegex);
if (match && match.groups) {
foundSitekey = match.groups.sitekey;
foundAction = match.groups.action;
break;
}
}

console.log({
sitekey: foundSitekey,
action: foundAction,
});

await browser.close();
})();

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

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

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

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

const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: 'YOUR_API_KEY' }) // Укажите ваш API-ключ CapMonster Cloud
);

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

const recaptchaV3Request = new RecaptchaV3ProxylessRequest({
websiteURL: 'https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta', // URL вашей страницы с капчей
websiteKey: '6Le0xVgUAAAAAIt20XEB4rVhYOODgTl00d8juDob',
minScore: 0.6,
pageAction: 'myverify',
});

const solution = await cmcClient.Solve(recaptchaV3Request);
console.log('Solution:', solution);

});
Показать код (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

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

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

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

const recaptchaV3Request = new RecaptchaV3ProxylessRequest({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta",
websiteKey: "6Le0xVgUAAAAAIt20XEB4rVhYOODgTl00d8juDob",
minScore: 0.6,
pageAction: "myverify",
});

const solution = await cmcClient.Solve(recaptchaV3Request);
console.log("Solution:", solution);
}

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