Ignorando o Recaptcha V2 com NodeJS e Puppeteer
O que você vai aprender
- Configure NodeJS e Webstorm IDE em um Sistema Operacional Ubuntu recém-instalado.
- Instale e importe os módulos npm anticaptchaofficial e puppeteer.
- Você aprenderá como enviar o formulário isto com o script Recaptcha com NodeJS.
- Aprenda como criar um script puppeteer que abre o Chromium no modo de plano de fundo e navega até a página.
- Aprenda como tirar uma captura de tela de uma página e salvá-la no disco.
- Aprenda como preencher um campos de texto de um formulário usando seletores CSS.
- Aprenda como resolver Recaptcha v2, preencher textarea #g-recaptcha-response oculto e enviar o formulário.
- Notas sobre a extensão do seu conhecimento sobre Javascript ES6 e NodeJS.
Configure NodeJS e Webstorm IDE em um Sistema Operacional Ubuntu recém-instalado.
- Ubuntu OS: Instalar o Ubuntu OS não é um requisito, mas uma recomendação. A execução do NodeJS a partir do Windows também é possível, mas nosso código pode não ser compatível.
- Node JS: baixe o NodeJS para seu sistema operacional aqui
- Editor de código: recomendado VS Code ou Atom. Ambos são IDE gratuitos.
Instale curl e nodejs no Ubuntu:
apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs
Instale e importe os módulos npm anticaptchaofficial e puppeteer.
Instale os módulos npm anti-captcha e Puppeteer:
npm install @antiadmin/anticaptchaofficial puppeteer
Crie um novo arquivo index.js e adicione o seguinte. Substitua "YOUR_API_KEY" pela sua chave de Configurações da API:
const ac = require("@antiadmin/anticaptchaofficial");
const pup = require("puppeteer");
ac.setAPIKey('YOUR_API_KEY');
Aprenda como criar um script puppeteer que abre o Chromium no modo de plano de fundo e navega até a página.
Adicione o seguinte código para primeiro resolver o captcha, preencha o formulário com login e senha, cole o token g-response na área de texto com id="g-recaptcha-response" e envie o formulário:
const login = 'mylogin';
const password = 'my strong password';
(async () => {
console.log('solving recaptcha ...');
let token = await ac.solveRecaptchaV2Proxyless('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', '6LfydQgUAAAAAMuh1gRreQdKjAop7eGmi6TrNIzp');
if (!token) {
console.log('something went wrong');
return;
}
console.log('opening browser ..');
const browser = await pup.launch();
console.log('creating new tab ..');
const tab = await browser.newPage();
console.log('changing window size .. ');
await tab.setViewport({ width: 1360, height: 1000 });
console.log('opening target page ..');
await tab.goto('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', { waitUntil: "networkidle0" });
console.log('filling login input ..');
await tab.$eval('#contentbox > form > div > div:nth-child(1) > span > input', (element, login) => {
element.value = login;
}, login);
console.log('filling password input');
await tab.$eval('#contentbox > form > div > div:nth-child(2) > span > input', (element, password) => {
element.value = password;
}, password);
console.log('setting recaptcha g-response ...');
await tab.$eval('#g-recaptcha-response', (element, token) => {
element.value = token;
}, token);
console.log('submitting form .. ');
await Promise.all([
tab.click('#contentbox > form > div > div.tac.padding20px > button'),
tab.waitForNavigation({ waitUntil: "networkidle0" })
]);
console.log('making a screenshot ...');
await tab.screenshot({ path: 'screenshot.png' });
console.log('closing browser .. ');
await browser.close();
})();
Você pode notar que primeiro resolvemos o captcha e só então navegamos até a página e colamos o resultado. Funciona para o Recaptcha, pois já sabemos que a chave do site e a vida útil do token são de 120 segundos.
A captura de tela da página final é salva em screenshot.png. Se você deseja ver o que está acontecendo no navegador, desative o modo headless:
console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });
Notas sobre a extensão do seu conhecimento sobre Javascript ES6 e NodeJS.
Você aprendeu como ignorar um formulário com o Recaptcha V2 em sua maneira de implementação mais simples - com a área de texto "g-recaptcha-response" como parte do formulário. Você pode querer ampliar seu conhecimento:
- Aprenda o formulário como contornar o Recaptcha V2 com uma função de retorno de chamada usando NodeJS e Puppeteer.
- Cursos recomendados de NodeJS e Javascript ES6 por Maximilian Schwarzmüller: NodeJS - The Complete Guide e Accelerated ES6 Javascript Training