Selenium обход капчи кликами или токенами? Продолжаем разбираться что же быстрее

от автора

В предыдущей статье — Распознавание капчи токеном или кликами, что быстрее? Сравнение методов на практике (я ее кстати опубликовал еще и на DTF) я сравнил два метода обхода капчи (кликами и токеном) но с использованием Puppeteer, и анонсировал, что в следующей статье (то есть уже в этой) сделаю практическое сравнение этих же двух методов, но уже с использованием selenium и обход капчи будем считать завершенным. Полная картина, так сказать сложится. Ну… Не будем тянуть, переходим сразу к делу.

Selenium обход капчи GOOGLE — подготовка модулей

Использовать в этот раз будем модули от того же поставщика услуг, но уже под язык Python (так как главное отличие selenium от puppeteer в том, что они запускаются под разные языки). Я надеялся, что для Python будет примерно похожий модуль, как и для javascript (где просто в настройка будет достаточно поменять метод распознавания и не нужно будет использовать другое расширение, но либо мне не хватило технических скиллов, либо такого модуля под Python действительно нет пока, поэтому для сравнения будем использовать два разных модуля:

Правки в модуль, который использует Selenium для обхода капчи

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

Итак, правки вносились в эти строчки кода

# CONFIGURATION  url = "https://www.google.com/recaptcha/api2/demo" apikey = os.getenv('API KEY')  # LOCATORS  sitekey_locator = "//div[@id='g-recaptcha']" submit_button_captcha_locator = "//button[@data-action='demo_action']" success_message_locator = "//p[contains(@class,'successMessage')]"

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

Так что зафиксировали — в разделе Lokators необходимо подставлять свои значения со страницы с рекапчей.

У меня это вот такие значения:

# LOCATORS  sitekey_locator = "//div[@id='recaptcha-demo']" submit_button_captcha_locator = "//input[@id='recaptcha-demo-submit']" success_message_locator = "//div[contains(@class,'recaptcha-success')]"

Небольшие изменения для Python модуля обхода гугл капчи методом кликов

Модуль для обхода капчи Google selenium-recaptcha-solver-using-grid использует для обхода метод Грид, который может применяться для обхода капчи, в которых к изображению применяется сетка и требуется щелкнуть по плиткам сетки, например, по изображениям reCAPTCHA V2. Подробнее про работу указанного метода можно почитать в этой статье — Как обойти и автоматически решить reCAPTCHA с использованием Selenium

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

Изменил я только две строчки кода в указанном модуле:
9 строчку — вместо установленного там УРЛа демо страницы я подставил свой — https://2captcha.com/demo/recaptcha-v2

В 10 строчке вместо APIKEY_2CAPTCHA подставил свой ключ АПИ, который взял на главной странице сервиса 2captcha, соответственно.

В целом все, больше никаких правок сделано не было. 

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

Сравнение модулей под Selenium для обхода капчи в скорости распознавания

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

Если нет желания смотреть видео (хотя там всего 40 секунд), оставлю результаты теста тут — при обходе гугл капчи с использованием Selenium токеном скорость распознавания составила 1 минута 30 секунд, а вот распознавание точно такой же Google reCAPTCHA но кликами заняло у модуля уже 2 минуты 30 секунд, вполне себе серьезная разница, как считаете? 

Для более лучшего понимания переведем это все в капчи и минуты, итак, при использовании метода токенов за сутки (если учесть что модуль будет решать капчу в один поток не переставая) вы решите 960 капч, а при использовании метода кликов —  576 капч.

А по времени метод распознавания капчи сэкономит вам примерно 6,5 часов в сутках (ну или даст фору — кому как больше нравится).

Интересный момент — что при точно таком же сравнении методов, но при использовании puppeteer — результат был примерно таким же, метод токенов выиграл. Более того, в случае с puppeteer скорость распознавания кликами была неприлично медленной, более 4 минут.

Так что выбор за вами, токены или клики…


ссылка на оригинал статьи https://habr.com/ru/articles/860222/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *