Использование расширения 2captcha-solver в Puppeteer
Используя API, вы можете создать инструмент для решения капчи в Puppeteer.
В этой статье разберем, как использовать расширение 2captcha-solver вместе с Puppeteer. Puppeteer это библиотека Node, которая позволяет запускать браузер и выполнять в нем различные действия, примеры использования описаны тут. Node.js библиотека Puppeteer — это отличный инструмент для решения множества задач, требующих автоматизации браузера. Плюсом Puppeteer является его простота и возможность запуска в headless
режиме.
Для Puppeteer есть плагин, который позволяют скрывать факт автоматизации. Скрытие факта автоматизации важно при написании различных парсеров, так как это позволит браузеру выглядеть более человекоподобно и вызывать меньше подозрений при детектировании ботов.
В этой статье мы будем использовать Puppeteer, puppeteer-extra и puppeteer-extra-plugin-stealth. puppeteer-extra это легкая оболочка вокруг Puppeteer, а puppeteer-extra-plugin-stealth это дополнение к puppeteer-extra, предназначенное для скрытия следов автоматизации.
В пошаговом описании ниже, разберем как решить капчу на странице https://2captcha.com/demo/recaptcha-v2.
1. Установка компонентов
Установка Puppeteer и других необходимых пакетов:
npm i puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
2. Настройка расширения
Необходимо скачать архив с расширением, и распаковать его в папку ./2captcha-solver
в корне проекта.
Расширение имеет различные настройки, включая автоматическое решение указанного типа капч, поддержку proxy
, и другие настройки. Настройки доступны в файле ./common/config.js
. Для добавления настройки автоматического решения reCAPTCHA V2, необходимо открыть файл ./common/config.js
и изменить значение поля autoSolveRecaptchaV2
на true
.
Обязательной настройкой является добавление своего API key, остальные настройки опциональные.
Далее необходимо выполнить настройку расширения:
-
Указать свой API ключ в файле настроек расширения
./common/config.js
. В полеapiKey
напишите свой ключ. Значение своего API ключа можно посмотреть на странице.
Пример:apiKey: "8080629c1221fdd82m8080000ff0c99c"
-
Отключаем открытие страницы настроек расширения после установки. Для этого в файле
./manifest.json
удаляем следующие строки:
"options_ui": {
"page": "options/options.html",
"open_in_tab": true
},
3. Автоматизация браузера
Запуск и инициализация расширения в Puppeteer:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const { executablePath } = require('puppeteer');
(async () => {
const pathToExtension = require('path').join(__dirname, '2captcha-solver');
puppeteer.use(StealthPlugin())
const browser = await puppeteer.launch({
headless: false,
args: [
`--disable-extensions-except=${pathToExtension}`,
`--load-extension=${pathToExtension}`,
],
executablePath: executablePath()
});
const [page] = await browser.pages()
})();
3.1 Переход на страницу
Открытие необходимой страницы, и отправка капчи.
С помощью page.goto()
мы переходим на необходимую страницу. Далее необходимо отправить капчу для решения, это можно сделать вручную или автоматически.
В нашем примере мы будем отправлять капчу вручную, для этого ждем пока отобразится кнопка расширения с CSS селектором '.captcha-solver'
, после этого нажимаем на эту кнопку. После нажатия на кнопку, капча отправится в сервис для решения.
// переходим по указанному адресу
await page.goto('https://2captcha.com/demo/recaptcha-v2')
// ждем пока появится элемент с CSS селектором ".captcha-solver"
await page.waitForSelector('.captcha-solver')
// кликаем по элементу с указанным селектором
await page.click('.captcha-solver')
3.2 Отслеживание решения капчи
После получения ответа от сервиса, у кнопки расширения '.captcha-solver'
изменится значение дата-атрибута data-state
. С помощью значения этого атрибута data-state
, вы можете отслеживать состояние расширения. После решения капчи, значение этого атрибута изменится на "solved"
.
Доступны следующие варианты атрибута data-state
:
Атрибут | Описание |
---|---|
data-state="ready" |
Расширение готово к работе. Для отправки капчи необходимо нажать на кнопку. |
data-state="solving" |
Капча решается. |
data-state="solved" |
Капча успешно решена. |
data-state="error" |
Капча не решена. |
На этом шаге необходимо подождать пока капча будет решена, после этого значение атрибута изменится на "solved"
, что будет сигнализировать об успешном решении капчи. После этого шага можно выполнять необходимые действия.
// По умолчанию waitForSelector ожидает в течение 30 секунд, но этого времени обычно не достаточно, поэтому указываем значение timeout вручную вторым параметром. Значение timeout указывается в "ms".
await page.waitForSelector(`.captcha-solver[data-state="solved"]`, {timeout: 180000})
4. Запуск
После решения капчи, переходим к выполнению необходимых на странице действий. В нашем примере мы нажмём на кнопку "Check", для проверки корректности полученного решения капчи. После успешного прохождения проверки, отобразится сообщение "Captcha is passed successfully!".
// После решения капчи выполняем необходимые действия, в нашем случае нажимаем на кнопку "Check", для проверки решения.
await page.click("button[type='submit']")
Поздравляем, капча успешна пройдена! Полный код примера размещен на GitHub.
Видео
Видео ниже наглядно демонстрирует процесс использования расширения в puppeteer.
Полезная информация:
-
Расширение 2captcha-solver имеет разные настройки, например автоматическое решение указанного типа капч или поддержка
proxy
, все эти настройки доступны в файле./common/config.js
, в папке с распакованным архивом. Для автоматический отправки reCAPTCHA V2, необходимо в файле./common/config.js
изменить значение поляautoSolveRecaptchaV2
наtrue
. -
Для тестирования или отладки вы можете использовать sandbox режим, в
sandbox
режиме отправленные капчи будут отправляться вам для решения. Подробнее о sandbox можно почитать тут. -
Puppeteer запущенный в
headless
режиме, не поддерживает расширения, но вы можете использовать xvfb что бы решить эту проблему.
Полезные ссылки:
- Полный код примера размещен на GitHub
- 2captcha-solver (source code)
- 2captcha-solver (chrome web store)
- FAQ о сервисе 2captcha для разработчиков https://2captcha.com/support/faq/developer
- puppeteer
- puppeteer-extra
- puppeteer-extra-plugin-stealth
- xvfb