Looking for international version of our service? Go to 2captcha.com

Использование расширения 2captcha-solver в Puppeteer

Как использовать расширение решателя 2Captcha в Puppeteer для обхода reCAPTCHA и других капч

Используя 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, остальные настройки опциональные.

Далее необходимо выполнить настройку расширения:

  1. Указать свой API ключ в файле настроек расширения ./common/config.js. В поле apiKey напишите свой ключ. Значение своего API ключа можно посмотреть на странице.
    Пример: apiKey: "8080629c1221fdd82m8080000ff0c99c"

  2. Отключаем открытие страницы настроек расширения после установки. Для этого в файле ./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 что бы решить эту проблему.

Полезные ссылки: