Como resolver o ReCaptcha v2 em JavaScript usando o Selenium&CapMonster Cloud
Executaremos o código via Node.js, portanto, faça o download com antecedência e instale-o em seu computador.
- Em seguida, crie uma pasta para um novo projeto, nomeie-o, por exemplo, BypassRecaptchav2Js, inicie o VS Code e abra a pasta criada.
- Crie um arquivo ".env" e adicione todos os parâmetros necessários a ele:
CAPMONSTER_API_KEY=YOUR_API_KEY
WEBSITE_KEY=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
WEBSITE_URL=https://www.google.com/recaptcha/api2/demo
- Carregue o pacote.json com o comando no terminal: npm init, precisamos desse arquivo para poder ver uma lista de todos os módulos e dependências instalados. Abra um terminal e instale os pacotes necessários com o comando "npm i @zennolab_com/capmonstercloud-client dotenv selenium selenium-webdriver".
- Crie um arquivo "main.js" e comece a escrever o código. Primeiro, vamos importar todos os componentes e carregar os dados:
require('dotenv').config();
const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2ProxylessRequest } = require('@zennolab_com/capmonstercloud-client');
const CAPMONSTER_API_KEY = process.env.CAPMONSTER_API_KEY;
const WEBSITE_KEY = process.env.WEBSITE_KEY;
const WEBSITE_URL = process.env.WEBSITE_URL;
- Agora precisamos iniciar o navegador, encontrar o elemento captcha e criar uma solicitação de resolução no CapMonster Cloud:
async function solveRecaptcha() {
Const options = new chrome.Options();
const driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
try {
aguardar driver.get(WEBSITE_URL);
console.log('Página aberta, reCAPTCHA resolvendo...');
- Agora vamos enviar uma solicitação com a tarefa criada para o servidor para resolver o reCAPTCHA:
// Inicializando o cliente CapMonster
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
// Criar uma solicitação para um reCAPTCHA resolvendo o tipo V2 Proxyless
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// resolução do reCAPTCHA usando o CapMonster
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);
console.log('Solution from CapMonster:', solution);
// Recuperar um token de um objeto de solução
const token = solution.solution.gRecaptchaResponse;
- Implementaremos a solução na página e criaremos um envio de formulário subsequente após a resolução bem-sucedida do captcha:
// Inserindo o resultado em um formulário
await driver.executeScript((result) => {
document.getElementById('g-recaptcha-response').value = result;
console.log('Token in the console:', result); // Saída do token para o console
}, token);
console.log('O token foi inserido no formulário!');
aguarde driver.findElement(By.id('recaptcha-demo-submit')).click();
console.log('Formulário enviado!'); // Etapa opcional
// Pausa de 10 segundos
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (error) {
console.error('Error:', error);
} finally {
aguardar driver.quit();
}
}
solveRecaptcha();
Código completo:
require('dotenv').config();
const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2ProxylessRequest } = require('@zennolab_com/capmonstercloud-client');
const CAPMONSTER_API_KEY = process.env.CAPMONSTER_API_KEY;
const WEBSITE_KEY = process.env.WEBSITE_KEY;
const WEBSITE_URL = process.env.WEBSITE_URL;
função async solveRecaptcha() {
const options = new chrome.Options();
Const driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
try {
aguardar driver.get(WEBSITE_URL);
console.log('Página aberta, reCAPTCHA resolvendo...');
Inicialização do cliente CapMonster
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
// Criar uma solicitação para um reCAPTCHA resolvendo o tipo V2 Proxyless
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// solução reCAPTCHA usando o CapMonster
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);
console.log('Solution from CapMonster:', solution);
// Recuperar um token de um objeto de solução
const token = solution.solution.gRecaptchaResponse;
// Inserir o resultado em um formulário
await driver.executeScript((result) => {
document.getElementById('g-recaptcha-response').value = result;
console.log('Token in the console:', result); // Saída do token para o console
}, token);
console.log('O token foi inserido no formulário!');
aguarde driver.findElement(By.id('recaptcha-demo-submit')).click();
console.log('Formulário enviado!'); // Etapa opcional
// Pausa de 10 segundos
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (error) {
console.error('Error:', error);
} finally {
aguardar driver.quit();
}
}
solveRecaptcha();
Explicação do código:
Importando bibliotecas:
dotenv é usado para carregar variáveis de ambiente do arquivo .env.
selenium-webdriver é usado para automatizar o navegador usando o WebDriver.
selenium-webdriver/chrome fornece opções para personalizar o navegador Chrome.
@zennolab_com/capmonstercloud-client fornece ferramentas para trabalhar com o CapMonster Cloud.
Carregamento de variáveis de ambiente: o dotenv é usado para carregar variáveis de ambiente do arquivo .env, como CAPMONSTER_API_KEY, WEBSITE_KEY e WEBSITE_URL.
solveRecaptcha função: cria uma instância do driver do Chrome usando o Selenium WebDriver.
Inicializa o cliente CapMonster usando a CAPMONSTER_API_KEY carregada.
Vai para um site com reCAPTCHA.
Cria uma solicitação para uma solução do tipo reCAPTCHA V2 Proxyless.
Resolve o reCAPTCHA usando o CapMonster e obtém uma solução.
Insere o token resultante (solução) em um formulário em uma página da Web usando JavaScript.
Opcionalmente, envie o formulário clicando no botão com id 'recaptcha-demo-submit'.
Espera 10 segundos após a resolução.
Termina o driver.
try-catch-finally block:
O bloco try contém o código principal de execução da automação.
O bloco catch trata de quaisquer exceções e imprime uma mensagem de erro.
O bloco finally garante que o driver seja fechado mesmo que ocorra um erro.
Calling solveRecaptcha() função: executa a função solveRecaptcha() para resolver o reCAPTCHA ao executar o script.
Vamos executar nosso código com o comando no terminal: node main.js e veja o que acontece:

Note: Gostaríamos de lembrá-lo de que o produto é usado para automatizar testes em seus próprios sites e em sites aos quais você tem acesso legal.