Как стать автором
Поиск
Написать публикацию
Обновить

Распознавание капчи токеном или кликами, что быстрее? Сравнение методов на практике

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров2.5K

Очень часто по работе сталкиваюсь с различными сервисами для упрощения работы в различных сферах. Речь сейчас не про сервисы, типа Кей Коллектор или Ахрефс, а про Zennoposter или BAS — я не являюсь профессором в области автоматизации, объясню просто, как я понимаю — указанные сервисы это своего рода сложная многоуровневая оболочка, на базе которой можно создавать любые боты и скрипты, которые могут решать практически любые задачи без человеческого вмешательства. То есть нейросеть на минималках. И кстати, появились подобные сервисы еще задолго до того, как использование нейросети для повседневных задач стало мейнстримом.

Теперь к теме: Копаясь в недрах BAS я столкнулся с такой ситуацией, что многие разработчики, которые занимаются разработкой скриптов по BAS (смешно получилось — разработчики занимаются разработкой) идеализируют распознавание капчи кликами. 

Вероятно надо пояснить — речь идет про картинные и визуальные капчи (те, где нужно выбирать изображения на экране или кликать по картинкам (иконкам) в нужном порядке. Примеры картинных и визуальных капч — reCAPTCHA V2, hCaptcha, GeeTest CAPTCHA, Rotate CAPTCHA.

Так вот, эти капчи можно решитьдвумя способами — метод токенов и метод кликов. 

Кстати, если хочется погрузиться в методы распознавания капчи глубже, вот отличная статья — Распознавание капчи — разбираемся в сложном для понимания процессе максимально просто

Возвращаясь к идеализации метода кликов у разработчиков, пишущих скрипты и ботов под BAS, следует отметить, что этот метод действительно может быть проще в реализации и внедрении и для его внедрения может быть намного меньше препонов со стороны капча сервисов, которые эти самые капчи разрабатывают. Повторюсь, я не считаю себя гуру автоматизации, просто транслирую свой опыт и он мне показал, что решение капчи токеном быстрее и эффективнее, чем решение капчи кликами.

Теперь к фактам:

Дано — демо страница reCAPTCHA V2;

Что необходимо сделать — сравнить скорость распознавания капчи (в нашем случае reCAPTCHA V2) двумя методами.

За основу взято два расширения с Гитхаба (я хотел чтобы это были коробочные версии, но пришлось немного доработать под свою задачу).

  1. Расширение для распознавания капчи с использованием puppeteer — 2captcha‑solver‑in‑puppeteer

  2. Расширение для распознавания капчи методом кликов (также с использованием puppeteer) — puppeteer‑recaptcha‑solver‑using‑clicks

По факту, сравнение можно было бы закончить на первом расширении, так как там можно решать и токеном и кликами, но так как я в принципе начал сравнивать со второго и получил неоднозначный результат, решил добавить и второе расширение, для более наглядной демонстрации скорости решения капчи кликами.

Подготовка к распознаванию капчи (точечная настройка распознавателя капчи)

Опишу тут сразу все виды подготовки распознавателя капчи, чтобы далее к этому не возвращаться.

Яростные звуки клавиатуры (Клац...Клац...Клац...)
Яростные звуки клавиатуры (Клац...Клац...Клац...)

Подготовка к распознаванию капчи токеном

Так как оба распознавателя капчи настроены по дефолту на распознавание капчи с демо страницы сервиса который эти расширения и написал, я решил, что объективнее будет решать капчу на демо странице Гугла. Там и капча может быть посложнее, да и очков в пользу предвзятости отнимет (я надеюсь).

Итак, в первом расширении для того, чтобы расширение корректно работало и решало капчу токеном необходимо внести следующие изменения:

В файле config.js (он расположен тут — \2captcha-solver\common) в 11 строке убедится что напротив типа нашей капчи установлен метод token и подставить в 4 строку ваш ключ АПИ (см фото, может со временем что то поменяется, нумерация строк, как пример).

В файле manifest.js (он расположен на папку выше предыдущего файла) необходимо удалить из кода эту строчку.

"options_ui": {
    "page": "options/options.html",
    "open_in_tab": true
},

Ну и в индексном файле нужно изменить УРЛ страницы, где располагается капча (как я сказал, по дефолту там стоит демо страницы с сервиса 2капчи, в моем случае я туда поставил демо страницы Гугла).

Ниже (когда я писал этот текст это была 35 строка), в этом же файле, нужно поменять эту строчку

await page.click("button[type='submit']")

На вот такую

await page.click('#recaptcha-demo-submit')

Это необходимо, для того, чтобы решатель капчи смог отыскать кнопку “submit”, так как классы у них на демо странице Гугла и демо странице 2капчи немного отличаются. 

Важное уточнение - естественно для использования подобного распознавателя капчи в своих целях потребуется доработать его (или как минимум протестировать работоспособность).

Подготовка к распознаванию капчи кликами через первый распознаватель капчи

Для решения капчи кликами через первое расширение необходимо внести изменения следующего плана:

В файле config.js в виде метода решения капчи выбираем “click”— место где менять метод описано выше. Ключ АПИ остается тот же.

И важное уточнение — я закомментировал часть кода в файле index.js, так как решатель капчи отказывался дорешивать капчу, так как не мог найти кнопку. В моем случае мне не сложно было и самому кликнуть на кнопку submit и я просто закомментировал проблемную часть. А если нужно будет распознать капчу через это же расширение, вам потребуется его немного допилить.

Итак, закомментировал я следующий код (с 25 по 37 строку).

// ждем пока появится элемент с CSS селектором ".captcha-solver"
  await page.waitForSelector('.captcha-solver')
  // кликаем по элементу с указанным селектором
  await page.click('.captcha-solver')

  // По умолчанию waitForSelector ожидает в течении 30 секунд, так как этого времени зачастую не достаточно, то указываем значение timeout вручную вторым параметром.
  // Значение timeout указывается в "ms".
  await page.waitForSelector(`.captcha-solver[data-state="solved"]`, {timeout: 150000})
 
  // После решения капчи выполняем необходимые действия, в нашем случае нажимаем на кнопку  "check".
  await page.click('#recaptcha-demo-submit')
 
  // await browser.close();

В итоге у меня получилось вот так.

// // ждем пока появится элемент с CSS селектором ".captcha-solver"
  // await page.waitForSelector('.captcha-solver')
  // // кликаем по элементу с указанным селектором
  // await page.click('.captcha-solver')

  // // По умолчанию waitForSelector ожидает в течении 30 секунд, так как этого времени зачастую не достаточно, то указываем значение timeout вручную вторым параметром.
  // // Значение timeout указывается в "ms".
  // await page.waitForSelector(`.captcha-solver[data-state="solved"]`, {timeout: 150000})
 
  // // После решения капчи выполняем необходимые действия, в нашем случае нажимаем на кнопку  "check".
  // await page.click('#recaptcha-demo-submit')
 
  // // await browser.close();

Все теперь расширение готово решать капчу кликами.

Подготовка второго расширения для распознавания капчи для решения кликами

Тут пришлось немного повозиться, но не сильно долго. Все исполняемые файлы расположены в корне, так что прыгать по папкам не нужно, чисто небольшая уточняющая работа с кодом. Я подставил свой ключ АПИ и поменял УРЛ страницы, где мне нужно решить Google reCAPTCHA и немного повозился с кодом, в частности с селекторами. На странице Гугла селекторы отличаются от селекторов на демо странице 2капча, поэтому расширение изначально не хотело работать. Расписывать подробно, что именно было изменено и как не буду, так как второе расширение представлено чисто в ознакомительных целях.

Если хотите поработать с ним, есть целая статья в первоисточнике — Как обойти и автоматически решить reCAPTCHA с использованием Puppeteer

Итак, все расширения готовы к тестированию, запускаем!

Распознавание капчи методом токенов или методом кликов - что быстрее?

Я сделал запись экрана во время работы расширений при решении токеном и при решении кликами и совместил их в одном видео, и перед тем, как показать результаты - несколько очевидных (для кого-то может и неочевидных) замечаний.

Скорость распознавания капчи. ее сложность и т.п. будут зависеть от заспамленности вашего ip адреса, поэтому, если хотите решать капчу быстрее, дополнительно понадобятся прокси, которые также могут взять на себя часть трат. 

Говорят что если у вас хорошие прокси вообще может не потребоваться обходить капчу. Ну это только в том случае, если капча не стоит на странице по дефолту, а не появляется при наличии у системы подозрений, что вы, батенька (матушка) бот…

В целом же, хорошие прокси позволяют решать капчу быстрее. Я использовал свои домашний ip адрес.

В первом случае я сравнил скорость распознавания гугл капчи в рамках одного расширения и результат таков, что решение токеном быстрее, и судя по всему качественнее, результат вы можете видеть ниже.

По итогу токен решился за 18 секунд, а кликами за 1 минуту 10 секунд. И в дальнейшем у меня пару раз токеном даже получилось решить еще быстрее, а вот решить быстрее кликами, увы, уже не вышло…

Ну и в качестве сравнения я решил проверить как решает капчу кликами второе расширение, и в целом ситуация повторилась, скорость решения была достаточно низкая, при условии, что дело не в сервисе распознавания капчи, а в выбранном методе. Сервис отдавал ответ достаточно быстро, что можно увидеть на скринкасте, но вот рекапча снова и снова просила повторить.

Примечание — я намеренно ускорил время для второго расширения, так как рекапча была решена в итоге за 4 минуты. 

Таким образом, для своих задач я бы всеж предпочел токен, по крайней мере если использовать puppeteer, с Селениумом попробую в следующий раз.

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+4
Комментарии2

Публикации

Ближайшие события