Pular para o conteúdo principal
Está tendo problemas para obter o token?
Entre em contato com o suporte

ComplexImageTask Recognition

Parâmetros de solicitação

type<string>required

ComplexImageTask


class<string>required

recognition


imagesBase64<array>required

Array de imagens codificadas em base64. Exemplo: [ “/9j/4AAQSkZJRgABAQEAAAAAAAD…”]


metadata.Task<string>required

Valores possíveis: oocl_rotate_new e outros
Nome da tarefa (em inglês).

oocl_rotate_new

Criar tarefa oocl_rotate_new

Na solicitação, passamos duas imagens: fundo e círculo.

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

Solicitação

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

Exemplo de fundo (background_base64):

Exemplo de círculo (circle_base64):

Resposta

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

Obter resultado da tarefa oocl_rotate_new

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

Solicitação

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

Resposta Graus pelos quais o círculo deve ser girado no sentido horário.

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

oocl_rotate_double_new

Criar tarefa oocl_rotate_double_new

Na solicitação, passamos três imagens: fundo, anel, círculo.

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

Solicitação

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

Fundo (background_base64):

Anel (ring_base64):

Círculo (circle_base64):

Resposta

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

Obter resultado da tarefa oocl_rotate_double_new

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

Solicitação

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

Resposta Graus pelos quais o anel deve ser girado no sentido anti-horário e o círculo no sentido horário.

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

betpunch_3x3_rotate

Criar tarefa betpunch_3x3_rotate

Na solicitação, passamos nove imagens. As imagens devem ser passadas na seguinte ordem:

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

Solicitação

{ 
"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"
}
}
}

Resposta

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

Obter resultado da tarefa betpunch_3x3_rotate

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

Solicitação

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

Resposta "answer":[X,X,X,X,X,X,X,X,X], onde X é um valor inteiro de 1 a 4 para cada imagem. 4 - significa que a imagem não precisa ser girada; 1-3 - o número de rotações no sentido anti-horário da imagem.

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

bls

Criar tarefa bls

Na solicitação, enviamos 9 imagens no formato base64. Também passamos o valor buscado TaskArgument nos metadados.

Mais informações sobre o tema em nosso blog
POST
https://api.capmonster.cloud/createTask

Solicitação

{
"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"
}
}
}

Exemplo de tarefa:

Enviar imagens convertidas para base64:

Para este exemplo: "TaskArgument": "546"

Resposta

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

Obter resultado da tarefa bls

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

Solicitação

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

Resposta Um array de valores com elementos true ou false, dependendo se o número na imagem é o argumento buscado ou não.

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

shein

Criar tarefa shein

Na solicitação, passamos uma imagem no formato base64.

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

Solicitação

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

Exemplo de tarefa:

Resposta

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

Obter resultado da tarefa shein

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

Solicitação

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

Resposta Coordenadas a serem clicadas em uma ordem específica.

{
"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

Criar tarefa baidu

Na solicitação, passamos uma imagem no formato base64.

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

Solicitação

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

Exemplo de tarefa:

Resposta

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

Obter resultado da tarefa baidu

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

Solicitação

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

Resposta Os graus pelos quais a imagem precisa ser rotacionada no sentido horário.

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

Como Encontrar Todos os Parâmetros Necessários para a Criação da Tarefa

Manualmente

  1. Abra seu site onde o captcha aparece no navegador.
  2. Clique com o botão direito no elemento do captcha e selecione Inspecionar.

base64

Imagens em páginas web podem ser representadas como URL ou codificadas diretamente em formato Base64. Para encontrar o valor necessário, clique com o botão direito na imagem, selecione Inspecionar e examine cuidadosamente a seção Elements ou a grade de requisições de rede - lá você pode encontrar a URL ou o conteúdo codificado.

base64ComplexImage

Automaticamente

Uma forma conveniente de automatizar a busca por todos os parâmetros necessários.
Alguns parâmetros são regenerados a cada carregamento da página, então você precisará extraí-los através de um navegador — seja normal ou headless (por exemplo, usando Playwright).
Como os valores dos parâmetros dinâmicos são de curta duração, o captcha deve ser resolvido imediatamente após a captura deles.

Importante!

Os trechos de código fornecidos são exemplos básicos para familiarização com a extração dos parâmetros necessários. A implementação exata dependerá da sua página de captcha, sua estrutura e dos elementos/seletores HTML que ela utiliza.

Mostrar Código (Node.js)
import { chromium } from 'playwright';

// Função para extrair base64 do src
async function getBase64FromSrc(elementHandle) {
const src = await elementHandle.getAttribute('src');
if (src && src.startsWith('data:image')) {
return src.split(',')[1];
}
return null;
}

// Função para obter base64 usando screenshot (se src não estiver em base64)
async function elementToBase64(elementHandle) {
const base64 = await getBase64FromSrc(elementHandle);
if (base64) {
return base64; // Se a imagem já estiver em base64, retorná-la
}
const buffer = await elementHandle.screenshot();
return buffer.toString('base64');
}

// Função para converter array de elementos em array de strings base64
async function multipleElementsToBase64(elements) {
const base64Array = [];
for (const el of elements) {
const base64 = await elementToBase64(el);
base64Array.push(base64);
}
return base64Array;
}

// -------------------------------------------------------------
// Preparando base64 para diferentes tipos de captcha
// -------------------------------------------------------------

// 1. oocl_rotate_new (fundo + círculo)
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 (fundo + anel + círculo)
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 pequenas imagens)
async function prepareBetpunch3x3(page) {
const sectors = await page.$$('img.sector');

const sectorsBase64 = await multipleElementsToBase64(sectors);

return { sectorsBase64 };
}

// 4. bls (9 pequenas imagens para clicar)
async function prepareBls(page) {
const sectors = await page.$$('img.sector');

const sectorsBase64 = await multipleElementsToBase64(sectors);

return { sectorsBase64 };
}

// 5. shein (1 imagem grande)
async function prepareShein(page) {
const captchaImage = await page.$('img.captcha');

const captchaBase64 = await elementToBase64(captchaImage);

return { captchaBase64 };
}

// Exemplo com Playwright
async function run() {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com'); // Substituir pela URL real

// Exemplo de obtenção de base64 para oocl_rotate_new
const { backgroundBase64, circleBase64 } = await prepareOoclRotateNew(page);
console.log('Base64 do fundo:', backgroundBase64);
console.log('Base64 do círculo:', circleBase64);

await browser.close();
}

run();
Exemplo de Busca por Parâmetros oocl em Node.js
import { chromium } from "playwright";

// Proxy (opcional)
// 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(
"Nenhuma imagem encontrada em verify-img-panel ou 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("Fonte:", src);
console.log("Base64:", base64);
}
} catch (err) {
console.error(err.message);
}

await browser.close();
}

run();

Usar biblioteca 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));
});