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

bls

Внимание!

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

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

Ещё больше по теме в нашем блоге

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


ВАЖНО: получайте base64 изображений непосредственно перед созданием задачи, чтобы избежать ошибок при решении (см. раздел Как получить base64).


type<string>required

ComplexImageTask


class<string>required

recognition


imagesBase64<array>required

Массив изображений в кодировке base64 (без префикса data:image/png;base64,).


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

Название задания: "bls_3x3"


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

Значение числа, которое нужно найти на изображениях. Например: "123"


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

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

Альтернативный адрес метода

Для пользователей из России также доступен:

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

Подробнее в разделе 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
}

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

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

Альтернативный адрес метода

Для пользователей из России также доступен:

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

Подробнее в разделе 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"
}
}
}

Альтернативный способ решения (bls_text)

Вместо автоматического режима определения совпадений (bls_3x3) возможно использовать распознавание текста для каждого изображения отдельно — это даёт больше гибкости и позволяет точнее контролировать процесс обработки.

Данный подход реализуется через задачу ImageToTextTask с модулем bls_text (см. раздел Передача имени модуля). В этом режиме каждое изображение обрабатывается как отдельная капча, а результатом является распознанное текстовое значение.

Принцип работы

  1. Капча разбивается на отдельные изображения (9 элементов сетки).
  2. Каждое изображение отправляется как отдельная задача ImageToTextTask.
  3. В ответе возвращается распознанный текст (число).
  4. Полученные значения сравниваются с целевым, после чего определяется список подходящих изображений.

Пример запроса

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

Альтернативный адрес метода

Для пользователей из России также доступен:

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

Подробнее в разделе createTask.

Пример запроса

{
"clientKey": "API_KEY",
"task": {
"type": "ImageToTextTask",
"capMonsterModule": "bls_text",
"body": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...CruPHGc8nk5z+HtRQB//9k="
}
}

Пример ответа

{
"errorId": 0,
"status": "ready",
"errorCode": null,
"errorDescription": null,
"solution": {
"text": "123"
}
}

Пример автоматического решения bls_text

В примере каждая картинка отправляется отдельно как ImageToTextTask с модулем bls_text, после чего результаты распознавания собираются и обрабатываются. Вы получаете текст для каждого изображения и можете самостоятельно определять дальнейшую логику — например, сравнивать значения с целевым (target), фильтровать, комбинировать и реализовывать любую другую обработку в зависимости от задачи.

Показать код (Node.js)
const API_KEY = "API_KEY";
const CREATE_TASK_URL = "https://api.capmonster.cloud/createTask";
const GET_RESULT_URL = "https://api.capmonster.cloud/getTaskResult";

const target = "546";

// 9 картинок (передавайте каждую в формате: "/9j/4AAQSkZJ...6UUAf/Z")
const images = [
"base64_img_1",
"base64_img_2",
"base64_img_3",
"base64_img_4",
"base64_img_5",
"base64_img_6",
"base64_img_7",
"base64_img_8",
"base64_img_9",
];

// создание задачи (ОДНА картинка)
async function createTask(imageBase64) {
const payload = {
clientKey: API_KEY,
task: {
type: "ImageToTextTask",
capMonsterModule: "bls_text",
body: imageBase64,
},
};

console.log("=== REQUEST ===");
console.log(JSON.stringify(payload, null, 2));

const res = await fetch(CREATE_TASK_URL, {
method: "POST",
body: JSON.stringify(payload),
});

const data = await res.json();

console.log("=== CREATE RESPONSE ===");
console.log(JSON.stringify(data, null, 2));

if (data.errorId !== 0) {
throw new Error(data.errorDescription);
}

return data.taskId;
}

// ожидание результата
async function getResult(taskId) {
while (true) {
const res = await fetch(GET_RESULT_URL, {
method: "POST",
body: JSON.stringify({
clientKey: API_KEY,
taskId,
}),
});

const data = await res.json();

if (data.errorId !== 0) {
throw new Error(data.errorDescription);
}

if (data.status === "ready") {
return data.solution.text;
}

await new Promise((r) => setTimeout(r, 1500));
}
}

// основная логика
async function solveBlsText() {
try {
// 1. создаём задачи
const taskIds = await Promise.all(images.map((img) => createTask(img)));

// 2. получаем результаты
const results = await Promise.all(taskIds.map((id) => getResult(id)));

// 3. реализуем дальнейшие действия, например, сравниваем с target
const answer = results.map((text) => text === target);

console.log("RESULTS:", results);
console.log("ANSWER:", answer);

return answer;
} catch (err) {
console.error("ERROR:", err.message);
}
}

solveBlsText();

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

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

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

base64ComplexImage

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

Показать код (для браузера)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

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

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

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

const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Для ComplexImageTaskRecognitionRequest прокси не требуются
const blsRequest = new ComplexImageTaskRecognitionRequest({
imagesBase64: [
"your_image_1_base64",
"your_image_2_base64",
"your_image_3_base64",
"your_image_4_base64",
"your_image_5_base64",
"your_image_6_base64",
"your_image_7_base64",
"your_image_8_base64",
"your_image_9_base64",
],
metaData: {
Task: "bls_3x3",
TaskArgument: "123",
},
});

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

const result = await client.Solve(blsRequest);
console.log("Solution:", result.solution);
});
Показать код (Node.js)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

const {
CapMonsterCloudClientFactory,
ClientOptions,
ComplexImageTaskRecognitionRequest,
} = require("@zennolab_com/capmonstercloud-client");

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

async function solveBls3x3() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY }),
);
// Для ComplexImageTaskRecognitionRequest прокси не требуются
const blsRequest = new ComplexImageTaskRecognitionRequest({
imagesBase64: [
"your_image_1_base64",
"your_image_2_base64",
"your_image_3_base64",
"your_image_4_base64",
"your_image_5_base64",
"your_image_6_base64",
"your_image_7_base64",
"your_image_8_base64",
"your_image_9_base64",
],
metaData: {
Task: "bls_3x3",
TaskArgument: "123",
},
});

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

const result = await client.Solve(blsRequest);
console.log("Solution:", result.solution);
}

solveBls3x3().catch(console.error);