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

ComplexImageTask Recaptcha

O objeto contém dados sobre a tarefa para resolver o ReCaptcha2 do Google.

Parâmetros da solicitação

type<string>required

ComplexImageTask


class<string>required

recaptcha


imageUrls<array>required (se imagesBase64 não estiver preenchido)

Imagem única 4x4, 3x3 ou uma nova parte de captcha 1x1 (em um array). Exemplo: [“https://i.postimg.cc/yYjg75Kv/img1.jpg”]\


imagesBase64<array>required (se imageUrls não estiver preenchido)

Imagem única 4x4, 3x3 ou uma nova parte de captcha 1x1 no formato base64 (em um array). Exemplo: [ “/9j/4AAQSkZJRgABAQEAAAAAAAD…”]


metadata.Grid<string>required

Tamanho da grade de imagem. Valores possíveis: 4x4, 3x3, 1x1


metadata.TaskDefinition<string>required (se metadata.Task não estiver preenchido)

Valor técnico que define o tipo de tarefa

Como obter TaskDefinition

Os dados podem ser encontrados nas respostas das solicitações /recaptcha/{recaptchaApi}/reload ou /recaptcha/{recaptchaApi}/userverify, onde recaptchaApi é "enterprise" ou "api2" dependendo do tipo de Recaptcha. A resposta contém json, onde pode-se obter uma lista de TaskDefinitions para captchas carregados.


metadata.Task<string>required (se metadata.TaskDefinition não estiver preenchido)

Valores possíveis: Click on traffic lights e outros
Nome da tarefa (em inglês).


userAgent<string>optional

O User-Agent do navegador a ser utilizado ao carregar imagens, se os links foram passados em imageUrls. É necessário usar uma assinatura de navegador moderna, caso contrário o Google retornará um erro pedindo para atualizar o navegador.


websiteURL<string>optional

URL da página onde o captcha está sendo resolvido.

Descrição dos parâmetros

imageUrls: links para imagens.

imagesBase64: imagens no formato Base64.

metadata.Grid: metadados adicionais relacionados aos tamanhos da grade de imagens.

metadata.TaskDefinition: identificador/tipo da descrição da tarefa, por exemplo: /m/015qff significa "Click on traffic lights".

metadata.Task: metadados adicionais relacionados à tarefa.

userAgent: informações sobre o agente do usuário. Atual userAgent: userAgentPlaceholder

websiteURL: endereço da página da web com o captcha.

Criar tarefa

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

Solicitação

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

Resposta

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

Obter resultado da tarefa

Use o método getTaskResult para obter a solução do captcha. Dependendo da carga do sistema, você receberá uma resposta em um intervalo de tempo de 300ms a 6s.

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

Solicitação

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

Resposta

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

PropriedadeTipoDescrição
answerArrayLista com valores booleanos, "true" significa que você precisa clicar na imagem correspondente a essa posição.

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.

websitekey:

O processo é semelhante a encontrar o websitekey para ReCaptchaV2Task e ReCaptchaV2Enterprise.

imageUrls:

Encontre a URL nos atributos do elemento:

imgUrl

Você também pode obter a URL completa da imagem clicando com o botão direito na imagem e selecionando Abrir imagem em uma nova guia. Em seguida, copie a URL diretamente da barra de endereços do navegador.

imgUrl1

metadata.Task

Descrição da tarefa. Clique com o botão direito no texto da tarefa e, nas Ferramentas do Desenvolvedor, encontre o elemento correspondente na estrutura da página:

metadata

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 (para navegador)
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);

// Descrição da tarefa
const descEl =
document.querySelector('.rc-imageselect-desc-no-canonical') ||
document.querySelector('.rc-imageselect-desc');

const taskDescription = descEl
? descEl.textContent.trim()
: 'Descrição da tarefa não encontrada';

console.log(taskDescription);

// Número de blocos visíveis
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 = 'Desconhecido';
}

console.log(`Tamanho da grade: ${gridSize}`);
Mostrar código (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 de checkbox para reCAPTCHA não encontrado");
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 de desafio para reCAPTCHA não encontrado");
await browser.close();
return;
}

// Imagem
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("Imagem:", src);

// Tarefa
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() : "Não encontrado";
return text;
}
);
console.log("Tarefa: selecione todas as imagens com:", taskDescription);
} catch (error) {
console.log("Descrição da tarefa não encontrada.");
}

// Tamanho da grade
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 = "Desconhecido";
}

console.log(`Tamanho da grade: ${gridSize}`);

await browser.close();
}

extractCaptchaInfo();

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