reCAPTCHA v2

Объект содержит данные о задаче на решение reCAPTCHA v2 от Google. Для обеспечения универсальности решения этого вида капчи нам необходимо использовать все данные, которые вы используете во время автоматизации заполнения формы на целевом сайте, включая прокси, UserAgent браузера и cookies. Это позволит избежать любых проблем при изменении Google кода своей капчи.
Капча может решаться довольно долго по сравнению с обычной капчей, но это компенсируется тем, что полученный g-recaptcha-response действует еще 60 секунд после решения капчи.
CapMonster Cloud по умолчанию использует встроенные прокси, подходящие для большинства сайтов. Однако если токен не принимается целевым сайтом, повторите попытку с собственными прокси (RecaptchaV2Task при использовании прокси). Используйте одни и те же прокси при решении и последующей отправке токена на сайт.
-
При авторизации по IP добавьте 65.21.190.34 в белый список.
-
Если токен reCAPTCHA v2 по-прежнему не принимается — обратитесь в техническую поддержку.
Параметры запроса
type<string>requiredRecaptchaV2Task
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>optionalUser-Agent браузера, используемый в эмуляции. Необходимо использовать подпись современного браузера, иначе Google будет возвращать ошибку, требуя обновить браузер.
cookies<string>optionalДополнительные cookies, которые мы должны использовать во время взаимодействия с целевой страницей.
Формат: cookiename1=cookievalue1; cookiename2=cookievalue2
isInvisible<bool>optionaltrue, если капча невидимая, т.е. имеет скрытое поле для подтверждения, чекбокс отсутствует. При подозрении на бота вызывается дополнительная проверка.
proxyType<string>optionalhttp - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.
proxyAddress<string>optionalIP адрес прокси IPv4/IPv6. Не допускается:
- использование прозрачных прокси (там где можно видеть IP клиента);
- использование прокси на локальных машинах.
proxyPort<integer>optionalПорт прокси.
proxyLogin<string>optionalЛогин прокси-сервера.
proxyPassword<string>optionalПароль прокси-сервера.
Метод создания задачи
- RecaptchaV2Task (без прокси)
- RecaptchaV2Task (при использовании прокси)
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
}
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",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere",
"userAgent":"userAgentPlaceholder"
}
}
Ответ
{
"errorId":0,
"taskId":407533072
}
Метод получения результата задачи
На некоторых сайтах важно, чтобы UserAgent совпадал с тем, что использовался при решении капчи. Поэтому, если вместе с токеном CapMonster Cloud возвращает UserAgent, обязательно применяйте его при отправке формы или подтверждении решения на целевой странице.
Используйте метод getTaskResult чтобы получить решение ReCaptcha2. В зависимости от загрузки системы вы получите ответ через время от 100 мс.
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"
}
}
}
| Свойство | Тип | Описание |
|---|---|---|
| gRecaptchaResponse | String | Хеш, который необходимо подставить в форму с ReCaptcha2 в <textarea id="g-recaptcha-response" ..></textarea>. Имеет длину от 500 до 2190 байт. |
Как найти все нужные параметры для создания задачи на решение
Вручную
- Откройте ваш сайт, где отображается капча, в браузере.
- Правой кнопкой кликните по элементу капчи и выберите Inspect.
websiteKey (data-sitekey)
Вкладка Elements: элемент <div class="g-recaptcha"> на странице. Скопируйте значение атрибута data-sitekey, например:

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

recaptchaDataSValue (если используется)
Если на странице есть атрибут data-s, найдите его в HTML:
isInvisible
Вкладка Networks: если капча невидимая, в элементе будет атрибут size="invisible", например:

Автоматически
Для автоматизации поиска параметров их можно извлекать через браузер (обычный или headless, например, с Playwright) или напрямую из HTTP-запросов. Поскольку значения динамических параметров действуют недолго, их рекомендуется использовать сразу после получения.
Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых HTML-элементов и селекторов.
- JavaScript
- Python
- C#
Показать код (для браузера)
(() => {
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();
})();
Показать код
import asyncio
from urllib.parse import urlparse, parse_qs
from playwright.async_api import async_playwright
def parse_recaptcha_url(url):
parsed_url = urlparse(url)
params = parse_qs(parsed_url.query)
sitekey = params.get('k', [None])[0]
size = params.get('size', [None])[0]
return sitekey, size == 'invisible'
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto("https://example.com", timeout=60000)
captcha_url = await page.locator('iframe[
src^="https://www.google.com/recaptcha/api2/anchor?"]').get_attribute('src')
if captcha_url:
sitekey, is_invisible = parse_recaptcha_url(captcha_url)
print({"sitekey": sitekey, "isInvisible": is_invisible})
await browser.close()
asyncio.run(main())
Показать код
using Microsoft.Playwright;
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
class Program
{
static (string sitekey, bool isInvisible) ParseRecaptchaUrl(string url)
{
var uri = new Uri(url);
var queryParams = HttpUtility.ParseQueryString(uri.Query);
return (queryParams["k"], queryParams["size"] == "invisible");
}
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(
new BrowserTypeLaunchOptions { Headless = true });
var page = await browser.NewPageAsync();
await page.GotoAsync("https://example.com", new PageGotoOptions { Timeout = 60000 });
var captchaUrl = await page.Locator(
"iframe[src^='https://www.google.com/recaptcha/api2/anchor?']").GetAttributeAsync("src");
if (captchaUrl != null)
{
var (sitekey, isInvisible) = ParseRecaptchaUrl(captchaUrl);
Console.WriteLine($"{{\"sitekey\": \"{sitekey}\", \"isInvisible\": {isInvisible}}}");
}
await browser.CloseAsync();
}
}
Используйте библиотеку SDK
- JavaScript
- Python
- C#
Показать код (для браузера)
// 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);
Показать код
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2Request
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo # Раскомментируйте, если планируете использовать прокси
API_KEY = "YOUR_API_KEY" # Укажите ваш API-ключ CapMonster Cloud
async def solve_recaptcha_v2():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# Базовый пример без прокси
# CapMonster Cloud автоматически использует свои прокси
recaptcha2_request = RecaptchaV2Request(
websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
)
# Пример использования вашего собственного прокси
# Раскомментируйте данный блок, если вы хотите использовать собственный прокси
# proxy = ProxyInfo(
# proxyType="http",
# proxyAddress="123.45.67.89",
# proxyPort=8080,
# proxyLogin="username",
# proxyPassword="password"
# )
# recaptcha2_request = RecaptchaV2Request(
# websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
# websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
# proxy=proxy,
# userAgent="userAgentPlaceholder"
# )
# При необходимости можно проверить баланс
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(recaptcha2_request)
print("Solution:", result)
asyncio.run(solve_recaptcha_v2())
Показать код
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
using System;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async Task Main(string[] args)
{
// Ваш API-ключ от CapMonster Cloud
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY"
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
var recaptchaV2Request = new RecaptchaV2Request
{
WebsiteUrl = "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high", // URL страницы с капчей
WebsiteKey = "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd" // Замените на корректное значение
};
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
var recaptchaV2Request = new RecaptchaV2Request
{
WebsiteUrl = "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
WebsiteKey = "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
Proxy = new ProxyContainer(
"123.45.67.89",
8080,
ProxyType.Http,
"username",
"password"
)
};
*/
// При необходимости можно проверить баланс
var balance = await cmCloudClient.GetBalanceAsync();
Console.WriteLine("Balance: " + balance);
var recaptchaV2Result = await cmCloudClient.SolveAsync(recaptchaV2Request);
Console.WriteLine("Solution: " + recaptchaV2Result.Solution.Value);
}
}
