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

FunCaptcha

Atenção!
  • Para resolver o FunCaptcha, é necessário usar seu próprio proxy.

  • Se o proxy utiliza autenticação por IP, adicione o endereço 65.21.190.34 à lista de permissões (whitelist).

  • Use o mesmo proxy ao obter os parâmetros do CAPTCHA no site e ao criar a tarefa no CapMonster Cloud.

Parâmetros da solicitação


IMPORTANTE: alguns valores de parâmetros são dinâmicos — eles mudam a cada renderização da página que contém FunCaptcha.
Extraia-os imediatamente antes de criar a tarefa para evitar erros durante a resolução.
Veja exemplos de extração de parâmetros nas seções Encontrando os parâmetros do FunCaptcha e Resolução automática do FunCaptcha com data[blob].


type<string>required

FunCaptchaTask


websiteURL<string>required

A URL da página onde o captcha está localizado.


websitePublicKey<string>required

Chave do FunCaptcha (valor public key ou pk).

Exemplo de formato: EX72CCFB-26EX-40E5-91E6-85EX70BE98ED


data<string>optional

Parâmetro adicional. Obrigatório se o site usar data[blob].

Importante: Não carregue o iframe do captcha para extrair o blob. Depois que o captcha for carregado, o valor se torna inválido.


funcaptchaApiJSSubdomain<string>optional

Subdomínio da Arkose Labs (valor surl). Especifique apenas se for diferente do padrão: client-api.arkoselabs.com.

Importante: Indique apenas o domínio, sem o prefixo https://.


userAgent<string>optional

User-Agent do navegador. Use o valor atual compatível com o CapMonster Cloud: userAgentPlaceholder

Você pode obter o valor mais recente em: https://capmonster.cloud/api/useragent/actual.


cookies<string>optional

Informe cookies adicionais no formato:


cookieName1=value1; cookieName2=value2


proxyType<string>required

http - proxy http/https comum;
https - tente esta opção apenas se "http" não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy socks4;
socks5 - proxy socks5.


proxyAddress<string>required

Endereço IP do proxy IPv4/IPv6. Não é permitido:

  • uso de proxies transparentes (que revelem o IP do cliente);
  • uso de proxies em máquinas locais.

proxyPort<integer>required

Porta do proxy.


proxyLogin<string>required

Login do servidor proxy.


proxyPassword<string>required

Senha do servidor proxy.


Criar método de tarefa

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

Exemplo de requisição

{
"clientKey": "API_KEY",
"task": {
"type": "FunCaptchaTask",
"websiteURL": "https://yourwebsite.com/page-with-funcaptcha",
"websitePublicKey": "your-website-key",
"funcaptchaApiJSSubdomain": "example-api.arkoselabs.com",
"data": "{\"blob\":\"your-blob-value-1234567890\"}",
"userAgent": "userAgentPlaceholder",
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password"
}
}

Exemplo de resposta

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

Obter resultado da tarefa

Use o método getTaskResult para obter a solução FunCaptcha.

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

Exemplo de requisição

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

Exemplo de resposta

{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"token": "337187b9f57678923.5060184402|r=us-west-2|lang=en|pk=EX72CCFB-26EX-40E5-91E6-85EX70BE98ED|at=40|ag=101|cdn_url=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc|surl=https%3A%2F%2Fclient-api.arkoselabs.com|smurl=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc%2Fassets%2Fstyle-manager",
"userAgent": "userAgentPlaceholder"
},
"status": "ready"
}

Encontrando os parâmetros do FunCaptcha

websitePublicKey e funcaptchaApiJSSubdomain

Abra o DevTools → Elements e encontre o input oculto com ID verification-token ou FunCaptcha-Token. Eles contêm os valores de pk (websitePublicKey) e surl (funcaptchaApiJSSubdomain).

Obtenha os parâmetros via console:

const v = document.querySelector("#verification-token, #FunCaptcha-Token").value;
const p = Object.fromEntries(v.split("|").map(x => x.split("=")));
console.log("pk:", p.pk);
console.log("surl:", decodeURIComponent(p.surl));

data (blob)

Se o site usar um parâmetro adicional blob, você pode obtê-lo da seguinte forma:

1. Identificar a fonte dos dados

O parâmetro blob pode estar em:

  • Atributos HTML: por exemplo, data-blob ou outros atributos data-*.

  • Resposta JSON da API: retornada após uma ação do usuário (por exemplo, clique ou solicitação do captcha).

  • Parâmetro de consulta na URL dentro do JSON: às vezes o blob é passado como parte da URL.

2. Executar a requisição

  • GET request para a página onde o captcha é exibido, ou
  • POST request para a API que retorna os dados do captcha.

Importante: Não carregue o iframe do captcha para extrair o blob. Depois que o captcha for carregado, o parâmetro se torna inválido.

3. Extrair o parâmetro

  • Se a resposta for HTML — use regex ou uma ferramenta de análise HTML para localizar o atributo.
  • Se a resposta for JSON — obtenha o valor da chave correspondente (ex.: data.blob).
  • Se o blob estiver em uma URL — analise os parâmetros da query para extrair o valor.

Você também pode encontrar o parâmetro blob e seu valor usando os requests de rede no DevTools:

  1. Vá para a página com o captcha, abra o DevTools e acione o captcha para que apareça. Em seguida, abra a aba Network e encontre um request como: https://arkoselabs.example.com/fc/gt2/public_key/176068BF-9607-4799-B53D-366BE98E2B84

  2. Bloqueie o carregamento do iframe do captcha para obter um blob válido. Para fazer isso, pressione Ctrl + Shift + P (em navegadores Chromium), digite Enable network request blocking, habilite o bloqueio de requests e adicione um padrão como: /fc/gt2

    Após recarregar a página, o iframe será bloqueado. Copie o valor do parâmetro blob e use-o na sua requisição para resolver o captcha.

Resolução automática do FunCaptcha com data[blob]

Os exemplos em JavaScript (Node.js), Python e C# mostram como usar o Playwright para extrair os parâmetros public_key e blob, criar uma tarefa no CapMonster Cloud e obter o token de solução do captcha. Você pode implementar a mesma lógica usando outras ferramentas de automação ou teste.


Mostrar código
// npm install playwright

const { chromium } = require("playwright");

const apiKey = "YOUR_API_KEY"; // Chave de API do CapMonster Cloud
const websiteURL = "https://www.example.com/"; // Página com FunCaptcha

// Use o mesmo proxy no navegador e na tarefa do CapMonster Cloud
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

// Aguarda o request do FunCaptcha, verifica e extrai public_key e blob
async function captureBlobAndPublicKey(page) {
return new Promise(resolve => {
page.on("request", req => {
const url = req.url();

// Verifica se o request está relacionado à inicialização do FunCaptcha
if (url.includes("/fc/gt2/public_key/")) {
const publicKey = url.split("/fc/gt2/public_key/")[1].split("/")[0];
const post = req.postData();

// Verifica se há blob nos dados do POST e extrai
if (post && post.includes("data[blob]")) {
const params = new URLSearchParams(post);
const blob = params.get("data[blob]");

console.log("Extracted blob:", blob);
console.log("Extracted public_key:", publicKey);

resolve({ blob, publicKey });
}
}
});
});
}

// Cria uma FunCaptchaTask no CapMonster Cloud e envia os parâmetros
async function createTask(blob, publicKey) {
const task = {
type: "FunCaptchaTask",
websiteURL,
websitePublicKey: publicKey,
data: JSON.stringify({ blob }),
userAgent: "userAgentPlaceholder",
proxyType: proxy.proxyType,
proxyAddress: proxy.proxyAddress,
proxyPort: proxy.proxyPort,
proxyLogin: proxy.proxyLogin,
proxyPassword: proxy.proxyPassword
};

const res = await fetch("https://api.capmonster.cloud/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: apiKey, task })
});

const json = await res.json();

// Verifica a resposta do CapMonster Cloud e aguarda taskId
if (!json.taskId) {
console.error("createTask error:", json);
process.exit(1);
}

console.log("Task created:", json.taskId);
return json.taskId;
}

// Aguarda a solução da tarefa
async function getTaskResult(taskId) {
while (true) {
const res = await fetch("https://api.capmonster.cloud/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: apiKey, taskId })
});

const json = await res.json();

// Verifica se a solução está pronta
if (json.status === "ready") return json.solution;

console.log("Processing...");
await new Promise(r => setTimeout(r, 2500));
}
}

(async () => {
const browser = await chromium.launch({
headless: false,
proxy: {
server: `${proxy.proxyType}://${proxy.proxyAddress}:${proxy.proxyPort}`,
username: proxy.proxyLogin,
password: proxy.proxyPassword
}
});
const page = await browser.newPage();

// Bloqueia o iframe do captcha
await page.route("**/fc/gt2/**", route => route.abort());

console.log("Opening page...");
await page.goto(websiteURL, { waitUntil: "domcontentloaded" });

console.log("Capturing public_key + blob...");

/**
* IMPORTANTE!
* NESTA ETAPA, VOCÊ PRECISA DISPARAR O CAPTCHA.
* - clicar em Login / Sign up
* - inserir email / username
* - aguardar o FunCaptcha aparecer
*
* Exemplo:
* await page.click('text="Create account"');
* await page.waitForTimeout(1000);
*/

const { blob, publicKey } = await captureBlobAndPublicKey(page);

// Verifica se os parâmetros foram extraídos com sucesso
if (!blob || !publicKey) {
console.error("Failed to extract blob or public_key");
await browser.close();
return;
}

console.log("Creating CapMonster task...");
const taskId = await createTask(blob, publicKey);

console.log("Waiting for solution...");
const solution = await getTaskResult(taskId);

// Obtém o token final
console.log("CAPTCHA SOLVED");
console.log("Token:", solution.token);

await browser.close();
})();

Usar biblioteca SDK

Mostrar código (para navegador)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

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

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

const API_KEY = "YOUR_API_KEY"; // Informe sua chave de API do CapMonster Cloud

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

// O FunCaptcha só pode ser resolvido usando seu próprio proxy
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};

const funCaptchaRequest = new FunCaptchaRequest({
websiteURL: "https://yourwebsite.com/page-with-funcaptcha",
websitePublicKey: "your-website-public-key",
funcaptchaApiJSSubdomain: "your-funcaptcha-api-subdomain",
data: '{"blob":"your-blob-value"}',
proxy,
userAgent: "userAgentPlaceholder",
});

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

const result = await client.Solve(funCaptchaRequest);
console.log("Solution:", result.solution);
});
Mostrar código (Node.js)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

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

const API_KEY = "YOUR_API_KEY"; // Informe sua chave de API do CapMonster Cloud

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

// O FunCaptcha só pode ser resolvido usando seu próprio proxy
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};

const funCaptchaRequest = new FunCaptchaRequest({
websiteURL: "https://yourwebsite.com/page-with-funcaptcha",
websitePublicKey: "your-website-public-key",
funcaptchaApiJSSubdomain: "your-funcaptcha-api-subdomain",
data: '{"blob":"your-blob-value"}',
proxy,
userAgent: "userAgentPlaceholder",
});

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

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

solveFunCaptcha().catch(console.error);