Обход рекапчи V2 с помощью NodeJS и Puppeteer
Чему вы научитесь за урок
- Настройка NodeJS и Webstorm IDE в свежеустановленной Ubuntu OS.
- Установка и импорт npm модулей anticaptchaofficial и puppeteer.
- Вы научитесь отправлять эту форму с рекапчей с помощью скрипта NodeJS.
- Узнайте как написать скрипт для puppeteer, который открывает Chromium в фоновом режиме и переходит на страницу.
- Узнайте как сделать скриншот страницы и сохранить его на диск.
- Узнайте как заполнить форму используя CSS селекторы.
- Узнайте как решить Recaptcha v2, заполнить скрытое поле #g-recaptcha-response и отправить форму.
- Примечания о расширении ваших знаний о Javascript ES6 и NodeJS.
Настройка NodeJS и Webstorm IDE в свежеустановленной Ubuntu OS.
- Ubuntu OS: Установка Ubuntu OS не требуется, но рекомендуется. Запуск 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
Установка и импорт npm модулей anticaptchaofficial и puppeteer.
Установите npm модули anti-captcha и Puppeteer:
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 в фоновом режиме и переходит на страницу.
Добавьте этот код чтобы сначала решить капчу, затем заполнить поля формы с логин и паролем, вставить токен g-response в textarea с 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();
})();
Вы могли заметить, что мы сначала решили капчу и только потом перешли на страницу и вставили результат решения. Это работает для рекапчи так как мы уже знаем значение sitekey и время жизни токена равно 120 секундам.
Скриншот последней страницы был сохранен в файл screenshot.png. Если вы хотите увидеть, что происходит в браузере, выключите headless режим:
console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });
Примечания о расширении ваших знаний о Javascript ES6 и NodeJS.
Вы научились обходить форму с рекапчей V2 в ее самой простой имплементации - с textarea id "g-recaptcha-response", которая является частью формы. Вы также можете расширить свои знания:
- Научитесь обходить форму с рекапчей V2, которая использует функцию обратного вызова (callback) с помощью NodeJS и Puppeteer.
- Рекомендуемые курсы по NodeJS и Javascript ES6 от Maximilian Schwarzmüller: NodeJS - The Complete Guide и Accelerated ES6 Javascript Training