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

ComplexImage Recognition


Внимание!

Использование прокси-серверов для данной задачи не требуется.

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

type<string>required

ComplexImageTask


class<string>required

recognition


imagesBase64<array>required

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


Task (внутри metadata)<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

Внимание!

В начале процесса решения возможны временные unsolvable-ответы. Это не является ошибкой - капча продолжит успешно решаться после инициализации.

В запросе передаем одно изображение в формате 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
}

bills_audio

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

Аудио-капча bills_audio — это звуковая версия «капчи с чеками», где сгенерированные изображения или данные имитируют чеки и содержат, например, цифры, суммы и даты. В этом типе задачи пользователю предлагается прослушать аудиофайл и на основе услышанной информации подтвердить правильность ввода. Такой формат может выглядеть, например, следующим образом:

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

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"UklGRnjuAwBXQVZFZm10...f/2f/9/6z/vf8MAAAA"
],
"metadata": {
"Task": "bills_audio",
"PayloadType": "Audio"
}
}
}

Ответ

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

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

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

Запрос

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

Ответ
В ответе возвращаются цифры из аудио.

{
"solution": {
"answer": [6, 8, 4, 1, 2, 3],
"metadata": {"AnswerType": "Text"}
},
"cost": 0.0008,
"status": "ready",
"errorId": 0,
"errorCode": null,
"errorDescription": null
}

Как получить аудиофайл со страницы и преобразовать его в формат Base64

  1. Откройте страницу с капчей и запустите DevTools, затем перейдите во вкладку Network.
  2. Активируйте аудио-режим капчи, нажав соответствующую кнопку.
  3. В списке запросов найдите адрес вида: blob:https://example.com/3be79ac6-1b3d-43ef-9a8a-7ad8877b3606
  4. Скопируйте этот URL и откройте его в адресной строке браузера — откроется аудиофайл капчи в формате .wav.

  1. Сохраните файл и выполните конвертацию из .wav в Base64 удобным для вас способом — например, с помощью кода на Node.js:
const fs = require("fs");

// Путь к исходному .wav файлу
const filePath = "C:\\Users\\User\\Downloads\\file-acbe-4fb3-9f8e-f989ba6c7fde.wav";

const fileBuffer = fs.readFileSync(filePath);

// Конвертация в Base64
const base64 = fileBuffer.toString("base64");

// Сохранение Base64-строку в текстовый файл
fs.writeFileSync("output.txt", base64);

console.log("Файл успешно конвертирован в Base64 и сохранён как output.txt");
  1. Используйте полученную строку Base64 в запросе на решение в CapMonster Cloud.

Как найти Base64

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

Вручную

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

base64ComplexImage

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

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

Важно!

Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых 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_API_KEY' }) // Укажите ваш API-ключ CapMonster Cloud
);

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

const citRecognitionRequest = new ComplexImageTaskRecognitionRequest({
imagesBase64: ['/9xwee/'], // Изображение в формате base64
metaData: { Task: 'oocl_rotate' }
});

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

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

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

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

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

const citRecognitionRequest = new ComplexImageTaskRecognitionRequest({
imagesBase64: ['/9xwee/'], // Изображение в формате base64
metaData: { Task: 'oocl_rotate' }
});

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

solveComplexImageTask().catch(console.error);