Как автоматически решить и обойти reCAPTCHA в Puppeteer
Продолжаю паразитировать на гайдах из интернета, в этот раз тестирую гайд который также «любезно» предоставлен сервисом 2капча, а вернее был взят мною с их лендинга, переведен на русский язык и адаптирован под мой стиль.
Собственно сама англоязычная статья тут.
В статье описывается использование плагина «puppeteer-extra-plugin-stealth» для обхода reCAPTCHA в Puppeteer.
Краткий экскурс, что же такое puppeteer это инструмент написанный под Node. js для автоматизации браузера.
Основное преимущество Puppeteer то, что его можно использовать в headless режиме. А сам факт автоматизации браузера можно скрыть используя специальные плагины.
Как правило, начинающие автоматизаторы сыпятся на этом шаге, неумение грамотно скрыть от ресурса (который парсится) факта, что вы не бот а обычный юзер создает массу проблем в парсинге. Puppeteer позволяет это сделать сравнительно просто и без дополнительных бубнотанцев.
Что необходимо
Сразу оговорюсь — в жанном тексте не будет описания предмета и субъекта исследования, ровно как и описания причин сотворения мира — просто немного полезной информации про то, как обойти капчу в Puppeteer. Дальше вы уже сами решайте, как вы будете использовать прочитанную информацию.
По старой доброй традиции для начала все подготовим.
Нам потребуется
- сервис решения капч (было бы странно, если бы тут не было рефки, правда) — 2капча;
- cобственно сам puppeteer;
- puppeteer-extra легкая оболочка для Puppeteer;
- puppeteer-extra-plugin-stealth дополнение к puppeteer-extra, предназначенное для скрытия следов автоматизации.
Установка необходимых компонентов
Для начала установим Puppeteer и перечисленные выше пакеты:
Открываете консоль и вставляете там следующий код;
2. Настройка расширения
Настроим непосредственно расширение, которое будет решать капчу
1. Нужно просто скачать архив с расширением, и распаковать его в папку. /2captcha-solver в корне проекта.
Расширение имеет несколько настроек, например
- автоматическое решение капчи определенного типа
- поддержка proxy
- другие настройки
Настройки можно изменять через файле. /common/config.js.
Так как мы будем решать recaptcha V2, давайте изменим настройки под нее. Открываем файл ./common/config.js и меняем значение поля autoSolveRecaptchaV2 на true.
Обязательно добавьте свой API key (его возьмем из личного кабинета сервиса 2капча), остальные настройки опциональные.
Пример АПИ ключа — "35b9d7b7d407b126b8649128a264120e"
Ключ АПИ обязательно должен быть в кавычках, в противном случае скрипт будет выдавать ошибку
Отключаем открытие страницы настроек расширения после установки. Для этого в файле. /manifest.json удаляем следующие строки:
Дальше я буду описывать значения параметров, которые будут выполняться скриптом, если вам это не особо интересно, вы можете переходить в самый конец статьи, так как там будет готовое решение, которое работает. Так как основные настройки мы уже произвели.
Автоматизация браузера
Запуск и инициализация расширения в Puppeteer:
Переход на страницу
С помощью page. goto() мы переходим на необходимую страницу. Далее необходимо отправить капчу для решения, это можно сделать вручную или автоматически.
В нашем примере мы будем отправлять капчу вручную, для этого ждем пока отобразится кнопка расширения с CSS селектором «.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», что будет сигнализировать об успешном решении капчи. После этого шага можно выполнять необходимые действия.
4. Запуск
После решения капчи, переходим к выполнению необходимых на странице действий. В нашем примере мы нажмём на кнопку «Check", для проверки корректности полученного решения капчи. После успешного прохождения проверки, отобразится сообщение »Captcha is passed successfully!".
В видео показана работа скрипта
Рабочий файл можно скачать по ссылке ниже
Напоминаю, что после того, как вы скачаете указанный файл и распакуете его, в него же нужно будет поместить папку с решателем (о нем говориться выше) .
Удачного распознавания капчи, лайк приветсвуется!