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

ComplexImageTask Recaptcha

Объект содержит данные о задаче на решение ReCaptcha2 от Google.

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

type<string>required

ComplexImageTask


class<string>required

recaptcha


imageUrls<array>required (если не заполнено imagesBase64)

Цельное изображение 4x4, 3x3 или новой части капчи 1x1 (в массиве). Пример: [“https://i.postimg.cc/yYjg75Kv/img1.jpg”]\


imagesBase64<array>required (если не заполнено imageUrls)

Цельное изображение 4x4, 3x3 или новой части капчи 1x1 в формате base64 (в массиве). Пример: [ “/9j/4AAQSkZJRgABAQEAAAAAAAD…”]


Grid (внутри metadata)<string>required

Размер сетки с изображениями. Возможные значения: 4x4, 3x3, 1x1


TaskDefinition (внутри metadata)<string>required (если не заполнено Task)

Техническое значение, определяющее тип задания

Как получить TaskDefinition

Данные можно найти в ответах на запросы /recaptcha/{recaptchaApi}/reload или /recaptcha/{recaptchaApi}/userverify, где recaptchaApi - это "enterprise" или "api2" в зависимости от типа Recaptcha. В ответе лежит json, в котором можно взять список TaskDefinition-ов для подгруженных капч.


Task (внутри metadata)<string>required (если не заполнено TaskDefinition)

Возможные значения: Click on traffic lights и другие
Текст задания (на английском).


userAgent<string>optional

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


websiteURL<string>optional

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

Описание параметров

imageUrls: ссылки на изображения.

imagesBase64: изображения в формате Base64.

Grid (внутри metadata): дополнительные метаданные, связанные с размерами сетки изображений.

TaskDefinition (внутри metadata): идентификатор/тип описания задания, например: /m/015qff означает “Click on traffic lights”.

Task (внутри metadata): дополнительные метаданные, связанные с задачей.

userAgent: информация о пользовательском агенте. Актуальный userAgent: userAgentPlaceholder

websiteURL: адрес веб-страницы с капчей.

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

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

Запрос

{
"clientKey":"API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recaptcha",
"imageUrls":[ "https://i.postimg.cc/yYjg75Kv/payloadtraffic.jpg" ],
"metadata": {
"Task": "Click on traffic lights",
"Grid": "3x3",
"TaskDefinition": "/m/015qff"
},
"userAgent": "userAgentPlaceholder",
"websiteUrl": "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=middle"
}
}

Ответ

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

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

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

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

Запрос

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

Ответ

{
"errorId":0,
"status":"ready",
"solution": {
"answer": [ false, false, false, false, true, false, false, false, false ]
}
}

СвойствоТипОписание
answerArrayСписок в булевыми значениями, true - означает, что нужно произвести клик на соответствующее этой позиции изображение

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

Вручную

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

websitekey:

Процесс поиска аналогичен поиску websitekey ReCaptchaV2Task и ReCaptchaV2Enterprise.

imageUrls:

Найдите ссылку в атрибутах элемента:

imgUrl

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

imgUrl1

Task (внутри metadata)

Описание задания. Кликните правой кнопкой мыши на текст задания и в Инструментах разработчика найдите соответствующий элемент в структуре страницы:

metadata

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

Удобный способ автоматизировать поиск всех необходимых параметров. Некоторые параметры генерируются заново при каждой загрузке страницы, поэтому для их извлечения потребуется работать через браузер – обычный или в режиме headless (например, с помощью Playwright). Так как значения динамических параметров хранятся недолго, капчу нужно решать сразу после их получения.

Важно!

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

Показать код (для браузера)
const img = document.querySelector('img.rc-image-tile-33') || document.querySelector('img.rc-image-tile-44');
const src = img ? img.src : null;
console.log(src);

// Описание задания
const descEl =
document.querySelector('.rc-imageselect-desc-no-canonical') ||
document.querySelector('.rc-imageselect-desc');

const taskDescription = descEl
? descEl.textContent.trim()
: 'Описание задания не найдено';

console.log(taskDescription);

// Количество видимых плиток
const tiles = document.querySelectorAll('.rc-imageselect-tile');
const visibleTiles = Array.from(tiles).filter(tile => tile.offsetParent !== null);

const tileCount = visibleTiles.length;

let gridSize;
if (tileCount === 9) {
gridSize = '3x3';
} else if (tileCount === 16) {
gridSize = '4x4';
} else if (tileCount === 25) {
gridSize = '5x5';
} else {
gridSize = 'Unknown';
}

console.log(`Размер сетки: ${gridSize}`);
Показать код (Node.js)
import { chromium } from "playwright";

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

const url =
"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high";
await page.goto(url);

const frames = page.frames();
const checkboxFrame = frames.find((f) => f.url().includes("api2/anchor"));

if (!checkboxFrame) {
console.error("Не найден iframe с чекбоксом reCAPTCHA");
await browser.close();
return;
}

const checkbox = await checkboxFrame.waitForSelector("#recaptcha-anchor", {
timeout: 5000,
});
await checkbox.click();

await page.waitForTimeout(1000);
const updatedFrames = page.frames();
const challengeFrame = updatedFrames.find((f) =>
f.url().includes("api2/bframe")
);

if (!challengeFrame) {
console.error("Не найден iframe с заданием reCAPTCHA");
await browser.close();
return;
}

// Изображение
const img =
(await challengeFrame.$("img.rc-image-tile-33")) ||
(await challengeFrame.$("img.rc-image-tile-44"));
const src = img ? await img.getAttribute("src") : null;
console.log("Изображение:", src);

// Задание
try {
await challengeFrame.waitForSelector(
".rc-imageselect-desc-no-canonical, .rc-imageselect-desc",
{
timeout: 5000,
}
);
const taskDescription = await challengeFrame.$eval(
".rc-imageselect-desc-no-canonical, .rc-imageselect-desc",
(el) => {
const strong = el.querySelector("strong");
const text = strong ? strong.textContent.trim() : "Не найдено";
return text;
}
);
console.log("Задание: выбрать все изображения с:", taskDescription);
} catch (error) {
console.log("Описание задания не найдено.");
}

// Размер сетки
const tiles = await challengeFrame.$$(".rc-imageselect-tile");
const visibleTiles = await Promise.all(tiles.map((tile) => tile.isVisible()));
const tileCount = visibleTiles.filter(Boolean).length;

let gridSize;
if (tileCount === 9) {
gridSize = "3x3";
} else if (tileCount === 16) {
gridSize = "4x4";
} else if (tileCount === 25) {
gridSize = "5x5";
} else {
gridSize = "Unknown";
}

console.log(`Размер сетки: ${gridSize}`);

await browser.close();
}

extractCaptchaInfo();

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

// https://github.com/ZennoLab/capmonstercloud-client-js

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

document.addEventListener('DOMContentLoaded', async () => {
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: '<your capmonster.cloud API key>' }));
console.log(await cmcClient.getBalance());

const complexImageRecaptchaRequest = new ComplexImageRecaptchaRequest({
imageUrls: ['https://i.postimg.cc/yYjg75Kv/payloadtraffic.jpg'],
metaData: {
Grid: '3x3',
Task: 'Please click each image containing a mountain',
TaskDefinition: '/m/015qff',
},
websiteURL: 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=middle',
});

console.log(await cmcClient.Solve(complexImageRecaptchaRequest));
});