Обхід Recaptcha V2 за допомогою NodeJS і Puppeteer
Те, що ви збираєтеся навчитися
- Налаштування NodeJS і Webstorm IDE в щойно встановленій ОС Ubuntu.
- Встановлення та імпорт модулів anticaptchaofficial та puppeteer npm.
- Ви дізнаєтеся, як надсилати форму це за допомогою Recaptcha за допомогою сценарію NodeJS.
- Дізнайтеся, як написати сценарій puppeteer, який відкриває Chromium у фоновому режимі та переходить до сторінки.
- Дізнайтеся, як зробити скріншот сторінки і зберегти його на диску.
- Дізнайтеся, як заповнити текстові поля форми за допомогою селекторів CSS.
- Дізнайтеся, як вирішити Recaptcha v2, заповнити приховану область тексту #g-recaptcha-response та надіслати форму.
- Примітки щодо розширення ваших знань про Javascript ES6 та NodeJS.
Налаштування NodeJS і Webstorm IDE в щойно встановленій ОС Ubuntu.
- ОС Ubuntu: встановлення ОС Ubuntu є не вимогою, а рекомендацією. Запуск NodeJS із Windows також можливий, але наш код може бути несумісним.
- Node JS: завантажте NodeJS для вашої операційної системи тут
- Редактор коду: рекомендовано VS Code або Atom. Обидва безкоштовні IDE.
Встановіть curl і nodejs в Ubuntu:
apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs
Встановлення та імпорт модулів anticaptchaofficial та puppeteer npm.
Встановіть модулі anti-captcha та Puppeteer npm:
npm install @antiadmin/anticaptchaofficial puppeteer
Створіть новий файл index.js і додайте наступне. Замініть "YOUR_API_KEY" своїм ключем від Налаштування API:
const ac = require("@antiadmin/anticaptchaofficial");
const pup = require("puppeteer");
ac.setAPIKey('YOUR_API_KEY');
Дізнайтеся, як написати сценарій puppeteer, який відкриває Chromium у фоновому режимі та переходить до сторінки.
Додайте наступний код, щоб спочатку розв’язати captcha, потім заповніть форму логіном і паролем, вставте маркер g-response у текстове поле з id="g-recaptcha-response" та надішліть форму:
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();
})();
Ви можете зауважити, що ми спочатку перевіряємо капчу, а лише потім переходимо на сторінку та вставляємо результат. Це працює для Recaptcha, оскільки ми вже знаємо ключ сайту та час життя токена становить 120 секунд.
Скріншот останньої сторінки зберігається у screenshot.png. Якщо ви хочете побачити, що відбувається в браузері, вимкніть безголовий режим:
console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });
Примітки щодо розширення ваших знань про Javascript ES6 та NodeJS.
Ви дізналися, як обійти форму за допомогою Recaptcha V2 найпростішим способом реалізації – за допомогою текстового поля «g-recaptcha-response» як частини форми. Ви можете розширити свої знання:
- Вивчіть форму як обійти Recaptcha V2 із функцією зворотного виклику за допомогою NodeJS і Puppeteer.
- Рекомендовані курси NodeJS і Javascript ES6 Максиміліана Шварцмюллера: NodeJS - The Complete Guide і Accelerated ES6 Javascript Training