Как обойти и решить капчу в Puppeteer
Как обойти CAPTCHA в Puppeteer
Что такое Puppeteer
Puppeteer — это библиотека на JavaScript, предоставляющая высокоуровневый API для управления браузерами Chrome или Firefox через DevTools Protocol или WebDriver BiDi. По умолчанию Puppeteer работает в безголовом режиме (без видимого интерфейса), но его можно настроить для работы в режиме с видимым интерфейсом.
Как обойти CAPTCHA с помощью Puppeteer
CAPTCHA можно обойти, используя только Puppeteer или с расширением 2Captcha.
Какие типы CAPTCHA можно обойти с помощью Puppeteer (с расширением 2Captcha)
- reCaptcha (v2, v3, Enterprise)
- FunCaptcha
- Cloudflare Turnstile
- Amazon WAF
- Изображения CAPTCHA
- Geetest
- и другие типы CAPTCHA
В пошаговом описании ниже мы расскажем, как решить CAPTCHA на странице 2Captcha demo.
1. Установка компонентов
Установите Puppeteer и необходимые пакеты:
npm i puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
2. Настройка расширения
-
Скачайте архив с расширением и распакуйте его в папку
./2captcha-solver
в корне вашего проекта. -
Расширение имеет множество настроек, включая автоматическое решение CAPTCHA, поддержку прокси и другие параметры. Эти настройки находятся в файле
./common/config.js
.Чтобы включить автоматическое решение reCAPTCHA V2:
- Откройте файл
./common/config.js
и измените значение поляautoSolveRecaptchaV2
наtrue
.
- Откройте файл
-
Настройте расширение:
- Введите ваш API-ключ в файл настроек расширения
./common/config.js
. Ваш ключ должен быть записан в полеapiKey
. Вы можете увидеть и скопировать свой API-ключ на странице.
Пример:
apiKey: "8080629c1221fdd82m8080000ff0c99c"
- Введите ваш API-ключ в файл настроек расширения
-
Отключите открытие страницы настроек расширения после установки. Для этого удалите следующие строки в
./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 Открытие страницы
Откройте страницу 2Captcha demo и отправьте CAPTCHA.
Используя page.goto()
, перейдите на страницу. CAPTCHA можно отправить на решение как вручную, так и автоматически.
В этом примере мы отправляем CAPTCHA вручную, ожидая появления кнопки расширения с CSS-селектором .captcha-solver
, а затем нажимаем на эту кнопку. После нажатия CAPTCHA будет отправлена на решение сервису.
// Открытие страницы
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
После получения ответа от сервиса, кнопка расширения .captcha-solver
изменит значение атрибута data-state
. Наблюдая за значением этого атрибута, вы можете отслеживать состояние расширения. После того как CAPTCHA будет решена, значение атрибута изменится на "solved"
.
Описание значений атрибута data-state
:
Атрибут | Описание |
---|---|
data-state="ready" |
Расширение готово решить CAPTCHA. Нажмите кнопку, чтобы отправить её. |
data-state="solving" |
CAPTCHA решается. |
data-state="solved" |
CAPTCHA успешно решена. |
data-state="error" |
Произошла ошибка при получении ответа или CAPTCHA не была решена. |
На этом шаге необходимо дождаться, пока data-state
не изменится на "solved"
, что будет означать успешное решение CAPTCHA. После этого можно приступать к необходимым действиям.
// Ожидание, пока CAPTCHA не будет решена
await page.waitForSelector('.captcha-solver[data-state="solved"]', { timeout: 180000 });
4. Выполнение действий
После того как CAPTCHA будет решена, вы можете начать выполнять необходимые действия на странице. В этом примере мы нажимаем кнопку "Check", чтобы проверить правильность решения CAPTCHA. После успешной проверки вы увидите сообщение "Captcha is passed successfully!"
// Нажатие на кнопку "Check" для проверки решения CAPTCHA
await page.click("button[type='submit']");
Поздравляем, CAPTCHA успешно пройдена!
Полный исходный код примера доступен на GitHub.
Полезная информация
- Расширение имеет множество настроек, включая автоматическое решение CAPTCHA для определённых типов и поддержку прокси. Все эти настройки доступны в файле
./common/config.js
в папке с распакованным расширением. - Для автоматического решения reCAPTCHA V2 измените значение поля
autoSolveRecaptchaV2
наtrue
в файле./common/config.js
. - Вы можете использовать песочницу для тестирования. В режиме песочницы отправленные CAPTCHA будут отправляться вам для ручного решения. Узнать больше о песочнице можно здесь.
- Puppeteer, работающий в безголовом режиме, не поддерживает загрузку расширений. Для решения этой проблемы вы можете использовать Xvfb.
Руководства
- Руководство по решению Cloudflare Turnstile с помощью Puppeteer
- Руководство по решению reCAPTCHA с помощью Puppeteer
Вывод
Интеграция расширения 2Captcha с Puppeteer позволяет эффективно решать различные типы CAPTCHA, что значительно упрощает задачи автоматизации, такие как веб-скрейпинг, тестирование и создание ботов. Используя приведённые инструкции и примеры, вы сможете легко внедрить решение CAPTCHA в свои проекты на JavaScript.
Для более глубокого изучения возможностей API 2Captcha и расширения, посетите официальную документацию. Это руководство поможет вам оптимизировать рабочие процессы и повысить эффективность автоматизации.