Obejście Recaptcha V2 z NodeJS i Puppeteer
Czego się dowiesz
- Zainstaluj NodeJS i Webstorm IDE w świeżej instalacji Ubuntu OS.
- Zainstaluj i zaimportuj moduły npm anticaptchaofficial i puppeteer.
- Dowiesz się jak przesłać formularz ten z Recaptcha za pomocą skryptu NodeJS.
- Dowiedz się jak pisać skrypty puppeteer, które otwierają Chromium w tle i ładują daną stronę.
- Dowiedz się jak zrobić zrzut ekranu strony i zapisać go na dysku.
- Dowiedz się jak wypełnić formularz za pomocą selektorów CSS.
- Dowiedz się jak rozwiązywać Recaptcha v2, wypełniać ukryte pola textarea #g-recaptcha-response i przesyłać formularze.
- Poszerz swoją wiedzę o Javascript ES6 i NodeJS.
Zainstaluj NodeJS i Webstorm IDE w świeżej instalacji Ubuntu OS.
- Ubuntu OS: Instalacja Ubuntu OS nie jest wymogiem, ale zaleceniem. Uruchomienie NodeJS z Windows jest również możliwe, ale nasz kod może nie być kompatybilny.
- Node JS: Pobierz NodeJS dla swojego systemu operacyjnego tutaj
- Edytor kodu: Zalecane VS Code lub Atom. Oba są darmowymi IDE.
Zainstaluj curl i nodejs w Ubuntu:
apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs
Zainstaluj i zaimportuj moduły npm anticaptchaofficial i puppeteer.
Zainstaluj moduły anti-captcha i Puppeteer npm:
npm install @antiadmin/anticaptchaofficial puppeteer
Utwórz nowy plik index.js i dodaj następujące elementy. Zamień "YOUR_API_KEY" na swój klucz z Ustawienia API :
const ac = require("@antiadmin/anticaptchaofficial");
const pup = require("puppeteer");
ac.setAPIKey('YOUR_API_KEY');
Dowiedz się jak pisać skrypty puppeteer, które otwierają Chromium w tle i ładują daną stronę.
Dodaj następujący kod, aby najpierw rozwiązać captcha, następnie wypełnić formularz z loginem i hasłem, wkleić g-response token do textarea z id="g-recaptcha-response" i przesłać formularz:
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();
})();
Można zauważyć, że najpierw rozwiązujemy captcha, a dopiero potem przechodzimy na stronę i wklejamy wynik. Działa to w przypadku Recaptcha, ponieważ znamy już sitekey i lifetime tokena wynosi 120 sekund.
Zrzut ekranu strony końcowej zapisujemy do pliku screenshot.png. Jeśli chcesz zobaczyć, co dzieje się w przeglądarce, wyłącz tryb bezgłowy:
console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });
Poszerz swoją wiedzę o Javascript ES6 i NodeJS.
Dowiedziałeś się jak ominąć formularz z Recaptcha V2 w najprostszy sposób - z "g-recaptcha-response" textarea jako częścią formularza. Być może chcesz rozszerzyć swoją wiedzę:
- Naucz się jak ominąć Recaptcha V2 formularza z funkcją callback przy użyciu NodeJS i Puppeteer.
- Polecane kursy NodeJS i Javascript ES6 autorstwa Maximiliana Schwarzmüllera: NodeJS - The Complete Guide i Accelerated ES6 Javascript Training.