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

Friendly Captcha

Atenção!

O CapMonster Cloud, por padrão, funciona com proxies integrados — já incluídos no custo do serviço. É necessário especificar seus próprios proxies apenas nos casos em que o site não aceita o token ou quando o acesso aos serviços integrados está restrito.

Se o proxy utiliza autenticação por IP, é necessário adicionar o endereço 65.21.190.34 à lista de permissões (whitelist).

Parâmetros da solicitação

type<string>required

CustomTask


class<string>required

friendly


websiteURL<string>required

URL completo da página com o captcha.


websiteKey<string>required

Chave do Friendly Captcha (veja a seção Como encontrar o valor do sitekey).


apiGetLib (dentro de metadata)<string>required

URL do arquivo JS. Especifique a URL do arquivo JS de acordo com a versão do captcha:

  • V1: apiGetLib = https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js, onde X.Y.Z é a versão do cliente obtida no cabeçalho x-frc-client.

  • V2: apiGetLib = URL do arquivo site.min.js carregado na página. Exemplo: https://cdn.jsdelivr.net/npm/@friendlycaptcha/[email protected]/site.min.js, onde X.Y.Z é a versão do cliente.

Veja também as seções Criar método de tarefa e Como identificar a versão do Friendly Captcha.


userAgent<string>optional

User-Agent do navegador.
Forneça apenas o UA do Windows atual: userAgentPlaceholder


proxyType<string>required

http - proxy HTTP/HTTPS normal;
https - use 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:

  • Proxies transparentes
  • Proxies da máquina local


proxyPort<integer>required

Porta do proxy.


proxyLogin<string>required

Login do proxy.


proxyPassword<string>required

Senha do proxy.

Criar método de tarefa

Use o valor do parâmetro apiGetLib em metadata, correspondente à versão do Friendly Captcha.

Exemplo:

Para V1

"apiGetLib": "https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"

Para V2

"apiGetLib": "https://cdn.jsdelivr.net/npm/@friendlycaptcha/[email protected]/site.min.js"

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

Requisição

{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "friendly",
"websiteKey": "FFMGEMAD2K3JJ35P",
"websiteURL": "https://example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"apiGetLib":"https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"
}
}

Resposta

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

Obter resultado da tarefa

Use o método getTaskResult para obter a solução do Friendly Captcha.
O formato do token na resposta depende da versão do captcha usada no site:

V1: "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"

V2: "AQQA.8Q2TbgK_..._pknXDweJjKT2qwmroOhHcZsU4dHyu-jaGIPx9k7432p_num13buuTu6n4lVA=="

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

Requisição

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

Resposta

{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"status": "ready",
"solution": {
"data": {
"token": "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"
}
}
}

O valor do token obtido deve ser inserido no campo correspondente:

VersãoCampo para inserção do token
V1input.frc-captcha-solution
V2input.frc-captcha-response

Como encontrar o valor do sitekey

  • Para V1, este parâmetro pode ser encontrado em requisições de rede filtrando pelas palavras-chave sitekey ou puzzle?sitekey=:


  • Para V2, use a busca pelas palavras-chave sitekey ou data-sitekey entre as requisições ou elementos no código da página:

Como identificar a versão do Friendly Captcha

O Friendly Captcha pode ser usado em duas versões principais: V1 e V2. A versão pode ser identificada pelos scripts carregados ou pelas requisições de rede.

Friendly Captcha V1

Usado se os seguintes scripts estiverem presentes na página:

widget.min.js
widget.module.min.js

ou se puzzle?sitekey= aparecer nas requisições de rede:

Para identificar a versão do cliente, você deve:

  1. Abrir a requisição puzzle?sitekey=... encontrada e ir em Headers → Request Headers

  2. Encontrar o cabeçalho x-frc-client:

O cabeçalho contém a versão do cliente Friendly Captcha usada no site:

x-frc-client: <version>

Exemplos de valores: 0.9.14, 0.9.19, etc.

  1. Após identificar a versão em x-frc-client, insira-a no link CDN:
https://cdn.jsdelivr.net/npm/friendly-challenge@<VERSION>/widget.module.min.js

Por exemplo, se x-frc-client = 0.9.14, use:

https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js

Esse link deve ser passado no parâmetro apiGetLib ao criar a tarefa.


Friendly Captcha V2

Se o arquivo site.min.js for carregado no site, isso significa que está sendo usado o Friendly Captcha V2.

Passe a URL do site.min.js no parâmetro apiGetLib ao criar a tarefa:

Detecção automática da versão do Friendly Captcha

Você pode automatizar o processo de detecção da versão do Friendly Captcha no navegador usando a seguinte solução:

Mostrar código
(async function detectFriendlyCaptcha() {
const result = {
version: null,
clientVersion: null,
indicators: [],
siteMinJsLinks: [],
detectedCdn: null
};

const scripts = Array.from(document.scripts).map(s => s.src);

for (const src of scripts) {
if (!src) continue;

if (src.includes("widget.min.js") || src.includes("widget.module.min.js")) {
result.version = "V1";
result.detectedCdn = src;
result.indicators.push("Found widget script");
}

const match = src.match(/friendly-challenge@(\d+\.\d+\.\d+)/);
if (match) {
result.clientVersion = match[1];
result.version = "V1";
result.detectedCdn = src;
result.indicators.push("Detected CDN version");
}
}

const puzzleElements = document.querySelectorAll(
'[id*="friendly"], [class*="frc"], iframe[src*="friendly"]'
);

if (puzzleElements.length > 0) {
result.indicators.push("Found captcha DOM elements");
if (!result.version) result.version = "V1";
}

const resources = performance.getEntriesByType("resource");

for (const r of resources) {
if (r.name.includes("puzzle?sitekey")) {
result.version = "V1";
result.indicators.push("Found puzzle?sitekey request");
}
}

for (const src of scripts) {
if (!src) continue;

if (src.includes("site.min.js")) {
result.version = "V2";
result.detectedCdn = src;
result.indicators.push("Found site.min.js");
result.siteMinJsLinks.push(src);
}
}

if (!result.version) {
result.version = "Unknown (not detected)";
}

console.log("FriendlyCaptcha Detection Result:");
console.log(result);

return result;
})();