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

ComplexImageTask Recognition

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

type<string>required

ComplexImageTask


class<string>required

recognition


imagesBase64<array>required

Массив изображений в кодировке base64. Пример: [ “/9j/4AAQSkZJRgABAQEAAAAAAAD…”]


metadata.Task<string>required

Возможные значения: oocl_rotate_new и другие
Название задания (на английском).

oocl_rotate_new

Создание задачи oocl_rotate_new

В запросе передаем два изображения: фон и круг.

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

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"{background_base64}",
"{circle_base64}"
],
"metadata": {
"Task": "oocl_rotate_new"
}
}
}

Пример фона (background_base64):

Пример круга (circle_base64):

Ответ

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

Получение результата задачи oocl_rotate_new

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

Запрос

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

Ответ Градусы, на которые необходимо повернуть круг по часовой стрелке.

{
"errorId":0,
"status":"ready",
"errorCode":null,
"errorDescription":null,
"solution":
{
"answer":[130.90909],
"metadata":{"AnswerType":"NumericArray"}
}
}

oocl_rotate_double_new

Создание задачи oocl_rotate_double_new

В запросе передаем три изображения: фон, кольцо, круг.

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

Запрос

{ 
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"{background_base64}",
"{ring_base64}",
"{circle_base64}"
],
"metadata": {
"Task": "oocl_rotate_double_new"
}
}
}

Фон (background_base64):

Кольцо (ring_base64):

Круг (circle_base64):

Ответ

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

Получение результата задачи oocl_rotate_double_new

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

Запрос

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

Ответ Градусы, на которые необходимо повернуть кольцо против часовой и круг по часовой.

{
"errorId":0,
"status":"ready",
"errorCode":null,
"errorDescription":null,
"solution":
{
"answer":[130.90909],
"metadata":{"AnswerType":"NumericArray"}
}
}

betpunch_3x3_rotate

Создание задачи betpunch_3x3_rotate request

В запросе передаем девять изображений. Передавать изображения нужно в следующем порядке:

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

Запрос

{ 
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"{image_1_Base64}",
"{image_2_Base64}",
"{image_3_Base64}",
"{image_4_Base64}",
"{image_5_Base64}",
"{image_6_Base64}",
"{image_7_Base64}",
"{image_8_Base64}",
"{image_9_Base64}",
],
"metadata": {
"Task": "betpunch_3x3_rotate"
}
}
}

Ответ

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

Получение результата задачи betpunch_3x3_rotate request

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

Запрос

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

Ответ "answer":[X,X,X,X,X,X,X,X,X], где X - целочисленное значение от 1 до 4 для каждого изображения. 4 - означает, что картинку не нужно поворачивать; 1-3 - количество поворотов картинки против часовой стрелки.

{
"errorId":0,
"status":"ready",
"errorCode":null,
"errorDescription":null,
"solution":
{
"answer":[4,4,4,4,4,3,1,2,2],
"metadata":{"AnswerType":"NumericArray"}
}
}

bls

Создание задачи bls

В запросе передаем 9 изображений в формате base64. Также в metadata передаем искомое значение TaskArgument.

Ещё больше по теме в нашем блоге
POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey":{{API_key}},
"task":
{
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"image1_to_base64",
"image2_to_base64",
"image3_to_base64",
"image4_to_base64",
"image5_to_base64",
"image6_to_base64",
"image7_to_base64",
"image8_to_base64",
"image9_to_base64"
],
"metadata": {
"Task": "bls_3x3",
"TaskArgument": "123"
}
}
}

Пример задания:

Передавать сконвертированные в base64 картинки:

Для данного примера: "TaskArgument": "546"

Ответ

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

Получение результата задачи bls

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

Запрос

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

Ответ Массив значений с элементами true или false, в зависимости от того является ли число на картинке искомым аргументом или нет.

{
"errorId":0,
"status":"ready",
"errorCode":null,
"errorDescription":null,
"solution":
{
"answer":[true,true,false,false,true,false,false,true,true],
"metadata":{"AnswerType":"Grid"}
}
}

shein

Создание задачи shein

В запросе передаем одно изображение в формате base64.

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

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"base64"
],
"metadata": {
"Task": "shein"
}
}
}

Примеры задания:

Ответ

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

Получение результата задачи shein

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

Запрос

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

Ответ Координаты на которые необходимо кликнуть в определенном порядке.

{
"solution":
{
"answer":[{"X":68.99999964,"Y":201.954889},{"X":127.99999783999999,"Y":281.54887104},{"X":181.00000776,"Y":49.894734680000006}],
"metadata":{"AnswerType":"Coordinate"}
},
"cost":0.0003,
"status":"ready",
"errorId":0,
"errorCode":null,
"errorDescription":null
}

baidu

Создание задачи baidu

В запросе передаем одно изображение в формате base64.

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

Запрос

{
"clientKey": "API_KEY",
"task":
{
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": ["base64"],
"metadata": {
"Task": "baidu"
}
}
}

Примеры задания:

Ответ

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

Получение результата задачи baidu

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

Запрос

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

Ответ Градусы, на которые необходимо повернуть картинку по часовой стрелке.

{
"solution":
{
"answer":[297],
"metadata":{"AnswerType":"NumericArray"}
},
"cost":0.0005,
"status":"ready",
"errorId":0,
"errorCode":null,
"errorDescription":null
}

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

Вручную

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

base64

Изображения на страницах могут быть представлены либо в виде ссылки (URL), либо сразу закодированы в формате Base64. Чтобы найти нужное значение, кликните правой кнопкой мыши по изображению, выберите Просмотреть код (Inspect) и внимательно изучите раздел Элементы или сетку сетевых запросов – там вы сможете обнаружить ссылку или закодированное содержимое.

base64ComplexImage

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

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

Важно!

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

Показать код (Node.js)
import { chromium } from 'playwright';

// Функция для извлечения base64 из src
async function getBase64FromSrc(elementHandle) {
const src = await elementHandle.getAttribute('src');
if (src && src.startsWith('data:image')) {
return src.split(',')[1];
}
return null;
}

// Функция для получения base64 с помощью скриншота (если нет src в виде base64)
async function elementToBase64(elementHandle) {
const base64 = await getBase64FromSrc(elementHandle);
if (base64) {
return base64; // Если изображение уже в base64, возвращаем его
}
const buffer = await elementHandle.screenshot();
return buffer.toString('base64');
}

// Функция для конвертации массива элементов в массив base64 строк
async function multipleElementsToBase64(elements) {
const base64Array = [];
for (const el of elements) {
const base64 = await elementToBase64(el);
base64Array.push(base64);
}
return base64Array;
}

// -------------------------------------------------------------
// Подготовка base64 для разных типов капч
// -------------------------------------------------------------

// 1. oocl_rotate_new (background + circle)
async function prepareOoclRotateNew(page) {
const background = await page.$('img.background');
const circle = await page.$('img.circle');

const backgroundBase64 = await elementToBase64(background);
const circleBase64 = await elementToBase64(circle);

return { backgroundBase64, circleBase64 };
}

// 2. oocl_rotate_double_new (background + ring + circle)
async function prepareOoclRotateDoubleNew(page) {
const background = await page.$('img.background');
const ring = await page.$('img.ring');
const circle = await page.$('img.circle');

const backgroundBase64 = await elementToBase64(background);
const ringBase64 = await elementToBase64(ring);
const circleBase64 = await elementToBase64(circle);

return { backgroundBase64, ringBase64, circleBase64 };
}

// 3. betpunch_3x3_rotate (9 маленьких изображений)
async function prepareBetpunch3x3(page) {
const sectors = await page.$$('img.sector');

const sectorsBase64 = await multipleElementsToBase64(sectors);

return { sectorsBase64 };
}

// 4. bls (9 маленьких изображений для кликов)
async function prepareBls(page) {
const sectors = await page.$$('img.sector');

const sectorsBase64 = await multipleElementsToBase64(sectors);

return { sectorsBase64 };
}

// 5. shein (1 большое изображение)
async function prepareShein(page) {
const captchaImage = await page.$('img.captcha');

const captchaBase64 = await elementToBase64(captchaImage);

return { captchaBase64 };
}

// Пример работы Playwright
async function run() {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com'); // Заменить на реальный URL

// Пример получения base64 для oocl_rotate_new
const { backgroundBase64, circleBase64 } = await prepareOoclRotateNew(page);
console.log('Base64 background:', backgroundBase64);
console.log('Base64 circle:', circleBase64);

await browser.close();
}

run();
Пример поиска параметров для oocl на Node.js

import { chromium } from "playwright";

// Прокси (опционально)
// const proxyHost = "";
// const proxyUsername = "";
// const proxyPassword = "";

async function getBase64FromSrc(elementHandle) {
const src = await elementHandle.getAttribute("src");
if (src && src.startsWith("data:image")) {
return src.split(",")[1];
}
return null;
}

async function elementToBase64(elementHandle) {
const base64 = await getBase64FromSrc(elementHandle);
if (base64) {
return base64;
}
const buffer = await elementHandle.screenshot();
return buffer.toString("base64");
}

async function extractVerifyImagesBase64(page) {
const imgSelectors = [".verify-img-panel img", ".verify-sub-block img"];

const imageHandles = (
await Promise.all(imgSelectors.map((selector) => page.$$(selector)))
).flat();

if (imageHandles.length === 0) {
throw new Error(
"Не найдено изображений в verify-img-panel или verify-sub-block."
);
}

const imagesBase64 = [];
for (const handle of imageHandles) {
const base64 = await elementToBase64(handle);
imagesBase64.push({
src: await handle.getAttribute("src"),
base64,
});
}

return imagesBase64;
}

async function run() {
const browser = await chromium.launch({
headless: false,
// proxy: {
// server: `http://${proxyHost}`,
// username: proxyUsername,
// password: proxyPassword,
// },
});

const page = await browser.newPage();
await page.goto(
"https://example.com/registration/form?appurl=https://example.com"
);

try {
const images = await extractVerifyImagesBase64(page);
for (const { src, base64 } of images) {
console.log("Источник:", src);
console.log("Base64:", base64);
}
} catch (err) {
console.error(err.message);
}

await browser.close();
}

run();

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

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

import { CapMonsterCloudClientFactory, ClientOptions, ComplexImageTaskRecognitionRequest } 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 citRecognitionRequest = new ComplexImageTaskRecognitionRequest({
imagesBase64: ['/9xwee/'],
metaData: { Task: 'oocl_rotate' },
});

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