Как автоматизировать решение GeeTest капчи в Puppeteer (JavaScript)

Пример капчи GeeTest
Пример капчи GeeTest

В этом примере показано, как автоматизировать решение GeeTest капчи с помощью JavaScript библиотеки Puppeteer. Для решения капчи в этом примере используется сервис 2captcha.com. В этом примере демонстрируется как решать капчу GeeTest, расположенную на демо странице. Для работы примера вам необходима учетная запись 2captcha.com.

Особенности обход капчи GeeTest

Капча GeeTest это капча основанная на токенах, при решении капчи генерируется токен, далее сгенерированный токер отправляется на проверку для верификации. Если токен не коррекный, то капча не будет пройдена.

Описание особенностей решения капчи GeeTest из документации 2captcha:

Важно: для каждого запроса к API 2captcha необходимо получать новое значение challenge. Если капча уже была загружена на странице, то значение challenge является недействительным. Вам необходимо изучить запросы, которые выполняются при загрузке страницы и найти тот, в котором возвращается значение challenge. Затем, для получения нового challenge вам нужно каждый раз выполнять данный запрос и парсить его.

автор: 2captcha.com

Алгоритм действий для решения GeeTest капчи в Puppeteer:

  1. Поиск параметров капчи challenge, gt, api_server.
  2. Отправить капчу для решения в сервис 2captcha
  3. Получить решение капчи(токен)
  4. Открыть страницу с капчей и применить полученный ответ

Шаг №1 - Поиск параметров капчи

Для отправки капчи в сервис, необходимо узнать три параметра капчи: challenge, gt, api_server.

api_server - домен API (обязателен для некоторых сайтов), по умолчанию равен 'api.geetest.com'

gt - статический параметр.

сhallenge - динамический параметр.

Для поиска параметров challenge и gt необходимо изучить запросы которые делает капча на странице.

В частности необходимо найти запрос с помощью которого виджет капчи GeeTest получает свежий параметр challenge.

Открываем страницу https://2captcha.com/demo/geetest

Открываем DevTools, на вкладке Network включаем отображение Fetch/XHR запросов, и перезагружаем страницу.

Далее видим, что после перезагрузки появилось два запроса, проверяем ответы на запросы и находим необходимый ответ, в котором содержаться параметры challenge и gt. Теперь перед каждой отправкой капчи, необходимо делать идентичный запрос, что бы получать свежий параметр challenge.

Находим параметры <i>challenge </i>и <i>gt </i>в ответе на запрос GeeTest капчи после перезагрузки страницы.
Находим параметры challenge и gt в ответе на запрос GeeTest капчи после перезагрузки страницы.

Шаг №2 - Отправить капчу для решения в сервис 2captcha

Отправляем капчу с найденными параметрами:

const res = await solver.geetest({ gt: gt, challenge: challenge, pageurl: pageurl })

Шаг №3 - Получить решение капчи(токен)

Решение капчи представляет из себя три значения geetest_challenge, geetest_validate, geetest_seccode

const captchaAnswer = res.data const geetest_challenge = captchaAnswer.geetest_challenge const geetest_validate = captchaAnswer.geetest_validate const geetest_seccode = captchaAnswer.geetest_seccode

Шаг №4 - Открыть страницу с капчей и применить полученный ответ

Далее необходимо открыть страницу с капчей и применить полученное решение на странице. Полученные значения необходимо вставить в соответствующие html элементы GeeTest капчи на странице.

await page.goto('https://2captcha.com/demo/geetest'); await page.waitForSelector('input[name="geetest_challenge"]') await page.waitForSelector('input[name="geetest_validate"]') await page.waitForSelector('input[name="geetest_seccode"]') await page.waitForSelector('button[type="submit"]') // Используем полученное решение капчи GeeTest const setData = await page.evaluate((data) => { document.querySelector('input[name="geetest_challenge"]').value = data.geetest_challenge document.querySelector('input[name="geetest_validate"]').value = data.geetest_validate document.querySelector('input[name="geetest_seccode"]').value = data.geetest_seccode // Кликаем на кнопку для проверки результата document.querySelector('button[type="submit"]').click() }, captchaAnswer)
Вставляем полученные значения в соответствующие html элементы GeeTest капчи на странице.
Вставляем полученные значения в соответствующие html элементы GeeTest капчи на странице.

Готово. После этого можно переходить к выполнению действий на странице. В этом примере после этого происходит нажатие на кнопку "Проверить".

Исходный код (GitHub) примера решения GeeTest captcha в Puppeteer.

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

Начать дискуссию