Как решить ReCaptcha v2 на JavaScript с помощью Selenium&CapMonster Cloud
Запуск готового кода мы будем производить через Node.js, поэтому заранее скачайте его и установите на компьютер.
Далее создаем папку для нового проекта, назовем ее, например, BypassRecaptchav2Js, запустим VS Code и откроем созданную только что папку.
Создаем файл “.env”, добавляем туда все нужные нам параметры:
CAPMONSTER_API_KEY=ВАШ_API_KEY
WEBSITE_KEY=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
WEBSITE_URL=https://www.google.com/recaptcha/api2/demo
Загружаем package.json командой в терминале: npm init, этот файл нам нужен для возможности увидеть список всех установленных модулей и зависимостей. Открываем терминал и устанавливаем необходимые пакеты командой “npm i @zennolab_com/capmonstercloud-client dotenv selenium selenium-webdriver”.
Создаем файл “main.js” и начинаем писать код. Для начала импортируем все компоненты и загружаем данные:
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;
Теперь нам нужно запустить браузер, найти элемент капчи и создать запрос на решение в CapMonster Cloud:
async function solveRecaptcha() {
const options = new chrome.Options();
const driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
try {
await driver.get(WEBSITE_URL);
console.log('Страница открыта, решение reCAPTCHA...');
Теперь отправим запрос с созданной задачей на сервер для решения reCAPTCHA:
// Инициализация клиента CapMonster
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
// Создание запроса для решения reCAPTCHA типа V2 Proxyless
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Решение reCAPTCHA с использованием CapMonster
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);
console.log('Решение от CapMonster:', solution);
// Извлечение токена из объекта решения
const token = solution.solution.gRecaptchaResponse;
Внедрим решение на страницу и создадим последующую отправку формы после успешного решения капчи:
// Вставка результата в форму
await driver.executeScript((result) => {
document.getElementById('g-recaptcha-response').value = result;
console.log('Токен в консоли:', result); // Вывод токена в консоль
}, token);
console.log('Токен вставлен в форму!');
await driver.findElement(By.id('recaptcha-demo-submit')).click();
console.log('Форма отправлена!'); // Опциональный шаг
// Пауза в течение 10 секунд
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (error) {
console.error('Ошибка:', error);
} finally {
await driver.quit();
}
}
solveRecaptcha();
Вот так выглядит весь код:
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;
async function solveRecaptcha() {
const options = new chrome.Options();
const driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
try {
await driver.get(WEBSITE_URL);
console.log('Страница открыта, решение reCAPTCHA...');
// Инициализация клиента CapMonster
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
// Создание запроса для решения reCAPTCHA типа V2 Proxyless
const recaptchaV2ProxylessRequest = new RecaptchaV2ProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Решение reCAPTCHA с использованием CapMonster
const solution = await cmcClient.Solve(recaptchaV2ProxylessRequest);
console.log('Решение от CapMonster:', solution);
// Извлечение токена из объекта решения
const token = solution.solution.gRecaptchaResponse;
// Вставка результата в форму
await driver.executeScript((result) => {
document.getElementById('g-recaptcha-response').value = result;
console.log('Токен в консоли:', result); // Вывод токена в консоль
}, token);
console.log('Токен вставлен в форму!');
await driver.findElement(By.id('recaptcha-demo-submit')).click();
console.log('Форма отправлена!'); // Опциональный шаг
// Пауза в течение 10 секунд
await new Promise(resolve => setTimeout(resolve, 10000));
} catch (error) {
console.error('Ошибка:', error);
} finally {
await driver.quit();
}
}
solveRecaptcha();
Объяснение кода:
Импорт библиотек:
dotenv используется для загрузки переменных окружения из файла .env.
selenium-webdriver используется для автоматизации браузера с помощью WebDriver.
selenium-webdriver/chrome предоставляет опции для настройки браузера Chrome.
@zennolab_com/capmonstercloud-client предоставляет инструменты для работы с CapMonster Cloud.
Загрузка переменных окружения: используется dotenv для загрузки переменных окружения из файла .env, таких как CAPMONSTER_API_KEY, WEBSITE_KEY и WEBSITE_URL.
Функция solveRecaptcha: создает экземпляр драйвера Chrome с использованием Selenium WebDriver.
Инициализирует клиента CapMonster с использованием загруженного CAPMONSTER_API_KEY.
Переходит на веб-сайт с reCAPTCHA.
Создает запрос для решения reCAPTCHA типа V2 Proxyless.
Решает reCAPTCHA с использованием CapMonster и получает решение.
Вставляет полученный токен (решение) в форму на веб-странице с использованием JavaScript.
Опционально отправляет форму, вызывая клик на кнопку с id 'recaptcha-demo-submit'.
После решения ожидает 10 секунд.
Завершает работу драйвера.
Блок try-catch-finally:
Блок try содержит основной код выполнения автоматизации.
Блок catch обрабатывает любые исключения, выводит сообщение об ошибке.
Блок finally гарантирует, что драйвер будет закрыт даже в случае возникновения ошибки.
Вызов функции solveRecaptcha(): запускает функцию solveRecaptcha() для решения reCAPTCHA при выполнении скрипта.
Запустим наш код командой в терминале: node main.js и посмотрим, что получится:
NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.