RecaptchaV2Task
Este objeto contém dados para a solução do captcha Google ReCaptcha2. Para garantir a universalidade da solução desse tipo de captcha, você precisa usar todos os dados utilizados na automação do preenchimento do formulário na página de destino, incluindo proxies, o user-agent do navegador e cookies. Isso ajuda a evitar problemas quando o Google altera o código de seu captcha.
Esse tipo de captcha pode ser resolvido um pouco mais lentamente do que um captcha de imagem comum, mas esse problema é compensado pelo fato de que o valor g-captcha-response
que enviamos para você é válido pelos próximos 60 segundos após resolvermos seu ReCaptcha2.
Se o proxy for autorizado por IP, certifique-se de adicionar 116.203.55.208 à lista de permissões.
Parâmetros da solicitação
type
<string>requiredRecaptchaV2Task
websiteURL
<string>requiredEndereço da página da web com captcha.
websiteKey
<string>requiredChave do site do Recaptcha.<div class="g-recaptcha" data-sitekey="THIS_ONE"></div>
recaptchaDataSValue
<string>optionalAlgumas implementações personalizadas podem conter o parâmetro adicional "data-s" no div do ReCaptcha2, que na verdade é um token de uso único e deve ser coletado toda vez que você quiser resolver um ReCaptcha2.<div class="g-recaptcha" data-sitekey="sitekey" data-s="THIS_ONE"></div>
userAgent
<string>optionalUser-Agent do navegador usado na emulação. É necessário que você use uma assinatura de um navegador moderno, caso contrário, o Google pedirá para você "atualizar seu navegador".
cookies
<string>optionalCookies adicionais que devemos usar durante a interação com a página de destino ou com o Google.
Formato: cookiename1=cookievalue1; cookiename2=cookievalue2
isInvisible
<bool>optionaltrue se o captcha for invisível, ou seja, tem um campo oculto para confirmação, sem caixa de seleção. Se um bot for suspeito, uma verificação adicional será chamada.
proxyType
<string>optionalhttp - proxy regular http/https;
https - use essa opção apenas se "http" não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy socks4;
socks5 - proxy socks5.
proxyAddress
<string>optionalEndereço IP do proxy IPv4/IPv6. Não permitido:
- uso de nomes de host;
- uso de proxies transparentes (onde é possível ver o IP do cliente);
- uso de proxies em máquinas locais.
proxyPort
<integer>optionalPorta do proxy.
proxyLogin
<string>optionalLogin do servidor proxy.
proxyPassword
<string>optionalSenha do servidor proxy.
Método para criar tarefa
- RecaptchaV2Task (sem proxy)
- RecaptchaV2Task (com proxy)
https://api.capmonster.cloud/createTask
Solicitação
{
"clientKey":"API_KEY",
"task": {
"type":"RecaptchaV2Task",
"websiteURL":"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey":"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}
Resposta
{
"errorId":0,
"taskId":407533072
}
https://api.capmonster.cloud/createTask
Solicitação
{
"clientKey":"API_KEY",
"task": {
"type":"RecaptchaV2Task",
"websiteURL":"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey":"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere",
"userAgent":"userAgentPlaceholder"
}
}
Resposta
{
"errorId":0,
"taskId":407533072
}
Método para obter o resultado da tarefa
Use o método getTaskResult para solicitar a resposta para o ReCaptcha2. Você receberá uma resposta em 100 ms, dependendo da carga do serviço.
https://api.capmonster.cloud/getTaskResult
Solicitação
{
"clientKey":"API_KEY",
"taskId": 407533072
}
Resposta
{
"errorId":0,
"status":"ready",
"solution": {
"gRecaptchaResponse":"3AHJ_VuvYIBNBW5yyv0zRYJ75VkOKvhKj9_xGBJKnQimF72rfoq3Iy-DyGHMwLAo6a3"
}
}
Propriedade | Tipo | Descrição |
---|---|---|
gRecaptchaResponse | String | Hash que deve ser inserido no formulário de envio do Recaptcha2 em <textarea id="g-recaptcha-response" ..></textarea> . Possui um comprimento de 500 a 2190 bytes. |
Como Encontrar Todos os Parâmetros Necessários para a Criação da Tarefa
Manualmente
- Abra seu site onde o captcha aparece no navegador.
- Clique com o botão direito no elemento do captcha e selecione Inspecionar.
websiteKey (data-sitekey)
Aba "Elements": procure um elemento <div class="g-recaptcha">
na página. Copie o valor do atributo data-sitekey, por exemplo:
Aba "Network":
Abra a aba Network e recarregue a página com o captcha. Procure uma requisição como a abaixo (o valor de k é o data-sitekey):
recaptchaDataSValue (se usado)
Se a página contiver um atributo data-s, encontre-o no HTML:
isInvisible
Aba "Network": se o captcha for invisível, o elemento conterá o atributo size="invisible", por exemplo:
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.
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.
- JavaScript
- Python
- C#
Mostrar Código (para navegador)
(() => {
const iframeEl = document.querySelector('iframe[src^="https://www.google.com/recaptcha/api2/anchor?"]');
const captchaUrl = iframeEl?.getAttribute('src');
if (captchaUrl) {
const urlParams = new URLSearchParams(captchaUrl.split('?')[1]);
const sitekey = urlParams.get('k');
const size = urlParams.get('size');
const isInvisible = size === 'invisible';
const sitekeyEl = document.querySelector('[data-sitekey]');
const datasEl = document.querySelector('[data-s]');
const datas = datasEl?.getAttribute('data-s');
console.log({
sitekey: sitekey || sitekeyEl?.getAttribute('data-sitekey'),
datas,
isInvisible
});
}
})();
Mostrar Código (Node.js)
import { chromium } from "playwright";
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
await page.goto("https://example.com");
await page.waitForSelector('iframe[src^="https://www.google.com/recaptcha/api2/anchor?"]');
const captchaData = await page.evaluate(() => {
const iframeEl = document.querySelector('iframe[src^=
"https://www.google.com/recaptcha/api2/anchor?"]');
const captchaUrl = iframeEl?.getAttribute("src");
if (captchaUrl) {
const urlParams = new URLSearchParams(captchaUrl.split("?")[1]);
const sitekey = urlParams.get("k");
const size = urlParams.get("size");
const isInvisible = size === "invisible";
const sitekeyEl = document.querySelector("[data-sitekey]");
const datasEl = document.querySelector("[data-s]");
const datas = datasEl?.getAttribute("data-s");
return {
sitekey: sitekey || sitekeyEl?.getAttribute("data-sitekey"),
datas,
isInvisible,
};
}
return null;
});
console.log(captchaData);
await browser.close();
})();
Mostrar Código
import asyncio
from urllib.parse import urlparse, parse_qs
from playwright.async_api import async_playwright
def parse_recaptcha_url(url):
parsed_url = urlparse(url)
params = parse_qs(parsed_url.query)
sitekey = params.get('k', [None])[0]
size = params.get('size', [None])[0]
return sitekey, size == 'invisible'
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto("https://example.com", timeout=60000)
captcha_url = await page.locator('iframe[
src^="https://www.google.com/recaptcha/api2/anchor?"]').get_attribute('src')
if captcha_url:
sitekey, is_invisible = parse_recaptcha_url(captcha_url)
print({"sitekey": sitekey, "isInvisible": is_invisible})
await browser.close()
asyncio.run(main())
Mostrar Código
using Microsoft.Playwright;
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
class Program
{
static (string sitekey, bool isInvisible) ParseRecaptchaUrl(string url)
{
var uri = new Uri(url);
var queryParams = HttpUtility.ParseQueryString(uri.Query);
return (queryParams["k"], queryParams["size"] == "invisible");
}
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(
new BrowserTypeLaunchOptions { Headless = true });
var page = await browser.NewPageAsync();
await page.GotoAsync("https://example.com", new PageGotoOptions { Timeout = 60000 });
var captchaUrl = await page.Locator(
"iframe[src^='https://www.google.com/recaptcha/api2/anchor?']").GetAttributeAsync("src");
if (captchaUrl != null)
{
var (sitekey, isInvisible) = ParseRecaptchaUrl(captchaUrl);
Console.WriteLine($"{{\"sitekey\": \"{sitekey}\", \"isInvisible\": {isInvisible}}}");
}
await browser.CloseAsync();
}
}
Usar biblioteca SDK
- JavaScript
- Python
- C#
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request, /*RecaptchaV2Request*/ } 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 recaptchaV2Request = new RecaptchaV2Request({
websiteURL: 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high',
websiteKey: '6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd',
});
// const recaptchaV2Request = new RecaptchaV2Request({
// websiteURL: 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high',
// websiteKey: '6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd',
// proxyType: 'http',
// proxyAddress: '8.8.8.8',
// proxyPort: 8080,
// proxyLogin: 'proxyLoginHere',
// proxyPassword: 'proxyPasswordHere',
// userAgent: 'userAgentPlaceholder',
// });
console.log(await cmcClient.Solve(recaptchaV2Request));
});
# https://github.com/ZennoLab/capmonstercloud-client-python
# ReСaptchaV2:
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2Request
client_options = ClientOptions(api_key="your_api_key") # Replace with your CapMonster Cloud API key
cap_monster_client = CapMonsterClient(options=client_options)
recaptcha2request = RecaptchaV2Request(
websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high", # URL with captcha
websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd" # Replace with the correct website key
)
async def solve_captcha():
return await cap_monster_client.solve_captcha(recaptcha2request)
responses = asyncio.run(solve_captcha())
print(responses)
# ReСaptchaV2:
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2Request
client_options = ClientOptions(api_key="your_api_key") # Replace with your CapMonster Cloud API key
cap_monster_client = CapMonsterClient(options=client_options)
recaptcha2_request = RecaptchaV2Request(
websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high", # URL with captcha
websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd", # ReCaptcha v2 site key
proxyType="http",
proxyAddress="8.8.8.8",
proxyPort=8080,
proxyLogin="proxyLoginHere",
proxyPassword="proxyPasswordHere",
userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" # Use the current userAgent
)
async def solve_captcha():
return await cap_monster_client.solve_captcha(recaptcha2_request)
response = asyncio.run(solve_captcha())
print(response)
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
// ReСaptchaV2:
using Zennolab.CapMonsterCloud.Requests;
using Zennolab.CapMonsterCloud;
class Program
{
static async Task Main(string[] args)
{
var clientOptions = new ClientOptions
{
ClientKey = "your_api_key" // Replace with your CapMonster Cloud API key
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
var recaptchaV2Request = new RecaptchaV2Request
{
WebsiteUrl = "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high", // URL with captcha
WebsiteKey = "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd", // Replace with the correct website key
};
var recaptchaV2Result = await cmCloudClient.SolveAsync(recaptchaV2Request);
Console.WriteLine("Captcha Solution: " + recaptchaV2Result.Solution.Value);
}
}
// ReСaptchaV2:
using Zennolab.CapMonsterCloud.Requests;
using Zennolab.CapMonsterCloud;
class Program
{
static async Task Main(string[] args)
{
var clientOptions = new ClientOptions
{
ClientKey = "your_api_key" // Replace with your CapMonster Cloud API key
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
var recaptchaV2Request = new RecaptchaV2Request
{
WebsiteUrl = "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high", // URL with captcha
WebsiteKey = "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd", // Replace with the correct website key
ProxyType = ProxyType.Http,
ProxyAddress = "8.8.8.8",
ProxyPort = 8080,
ProxyLogin = "proxyLoginHere",
ProxyPassword = "proxyPasswordHere"
};
var recaptchaV2Result = await cmCloudClient.SolveAsync(recaptchaV2Request);
Console.WriteLine("Captcha Solution: " + recaptchaV2Result.Solution.Value);
}
}