Распознавание капчи: что быстрее — токен или клики? Практическое сравнение
Очень часто по работе сталкиваюсь с различными сервисами для упрощения работы в различных сферах. Речь сейчас не про сервисы, типа Кей Коллектор или Ахрефс, а про Zennoposter или BAS - я не являюсь профессором в области автоматизации, объясню просто, как я понимаю - указанные сервисы это своего рода сложная многоуровневая оболочка, на базе которой можно создавать любые боты и скрипты, которые могут решать практически любые задачи без человеческого вмешательства. То есть нейросеть на минималках. И кстати, появились подобные сервисы еще задолго до того, как использование нейросети для повседневных задач стало мэйнстримом.
Теперь к теме: Копаясь в недрах BAS я столкнулся с такой ситуацией, что многие разработчики, которые занимаются разработкой скриптов по BAS (смешно получилось - разработчики занимаются разработкой) идеализируют распознавание капчи кликами.
Вероятно надо пояснить - речь идет про картинные и визуальные капчи (те, где нужно выбирать изображения на экране или кликать по картинкам (иконкам) в нужном порядке. Примеры картинных и визуальных капч - reCAPTCHA V2, hCaptcha, GeeTest CAPTCHA, Rotate CAPTCHA.
Так вот, эти капчи можно решить двумя способами - метод токенов и метод кликов.
Кстати, если хочется погрузиться в методы распознавания капчи глубже, вот отличная статья - Распознавание капчи – разбираемся в сложном для понимания процессе максимально просто
Возвращаясь к идеализации метода кликов у разработчиков, пишущих скрипты и ботов под BAS, следует отметить, что этот метод действительно может быть проще в реализации и внедрении и для его внедрения может быть намного меньше препонов со стороны капча сервисов, которые эти самые капчи разрабатывают. Повторюсь, я не считаю себя гуру автоматизации, просто транслирую свой опыт и он мне показал, что решение капчи токеном быстрее и эффективнее, чем решение капчи кликами.
Теперь к фактам:
Дано - демо страница reCAPTCHA V2
Вопрос - сравнить скорость распознавания капчи (в нашем случае reCAPTCHA V2) двумя методами.
За основу взято два расширения с Гитхаба (я хотел чтобы это были коробочные версии, но пришлось немного доработать под свою задачу).
Расширение для распознавания капчи с использованием puppeteer - 2captcha-solver-in-puppeteer
Расширение для распознавания капчи методом кликов (также с использованием puppeteer) - puppeteer-recaptcha-solver-using-clicks
По факту, сравнение можно было бы закончить на первом расширении, так как там можно решать и токеном и кликами, но так как я в принципе начал сравнивать со второго и получил неоднозначный результат, решил добавить и второе расширение, для более наглядной демонстрации скорости решения капчи кликами.
Подготовка к распознаванию капчи (точечная настройка распознавателя капчи)
Опишу тут сразу все виды подготовки распознавателя капчи, чтобы далее к этому не возвращаться.
Подготовка к распознаванию капчи токеном
Так как оба распознавателя капчи настроены по дефолту на распознавание капчи с демо страницы сервиса который эти расширения и написал, я решил, что объективнее будет решать капчу на демо странице Гугла. Там и капча может быть посложнее, да и очков в пользу предвзятости отнимет (я надеюсь).
Итак, в первом расширении для того, чтобы расширение корректно работало и решало капчу токеном необходимо внести следующие изменения:
В файле config.js (он расположен тут - \2captcha-solver\common) в 11 строке убедится что напротив типа нашей капчи установлен метод token и подставить 4 строку ваш ключ АПИ (см фото, может со временем что то поменяется, нумерация строк, как пример).
В файле manifest.js (он расположен на папку выше предыдущего файла) необходимо удалить из кода эту строчку
Ну и в индексном файле нужно изменить УРЛ страницы, где располагается капча (как я сказал, по дефолту там стоит демо страницы с сервиса 2капчи, в моем случае я туда поставил демо страницы Гугла)
Ниже (когда я писал этот текст это была 35 строка), в этом же файле, нужно поменять эту строчку
На вот такую
Это необходимо, для того, чтобы решатель капчи смог отыскать кнопку “submit”, так как классы у них на демо странице Гугла и демо странице 2капчи немного отличаются.
Важное уточнение - естественно для использования подобного распознавателя капчи в своих целях потребуется доработать его (или как минимум протестировать работоспособность).
Подготовка к распознаванию капчи кликами через первый распознаватель капчи
Для решения капчи кликами через первое расширение необходимо внести изменения следующего плана:
В файле config.js в виде метода решения капчи выбираем “click” - место где менять метод описано выше. Ключ АПИ остается тот же.
И важное уточнение - я закомментировал часть кода в файле index.js, так как решатель капчи отказывался дорешивать капчу, так как не мог найти кнопку. В моем случае мне не сложно было и самому кликнуть на кнопку submit и я просто закомментировал проблемную часть. А если нужно будет распознать капчу через это же расширение, вам потребуется его немного допилить.
Итак, закомментировал я следующий код (с 25 по 37 строку)
В итоге у меня получилось вот так
Все теперь расширение готово решать капчу кликами.
Подготовка второго расширения для распознавания капчи для решения кликами
Я сделал запись экрана во время работы расширений при решении токеном и при решении кликами и совместил их в одном видео, и перед тем, как показать результаты - несколько очевидных (для кого-то может и неочевидных) замечаний.
Скорость распознавания капчи. ее сложность и т.п. будут зависеть от заспамленности вашего ip адреса, поэтому, если хотите решать капчу быстрее, дополнительно понадобятся прокси, которые также могут взять на себя часть трат.
Говорят что если у вас хорошие прокси вообще может не потребоваться обходить капчу. Ну это только в том случае, если капча не стоит на странице по дефолту, а не появляется при наличии у системы подозрений, что вы, батенька (матушка) бот…
В целом же, хорошие прокси позволяют решать капчу быстрее. Я использовал свои домашний ip адрес.
В первом случае я сравнил скорость распознавания гугл капчи в рамках одного расширения и результат таков, что решение токеном быстрее, и судя по всему качественнее, результат вы можете видеть ниже.
Тут пришлось немного повозиться, но не сильно долго. Все исполняемые файлы расположены в корне, так что прыгать по папкам не нужно, чисто небольшая уточняющая работа с кодом. Я подставил свой ключ АПИ и поменял УРЛ страницы, где мне нужно решить Google reCAPTCHA и немного повозился с кодом, в частности с селекторами. На странице Гугла селекторы отличаются от селекторов на демо странице 2капча, поэтому расширение изначально не хотело работать. Расписывать подробно, что именно было изменено и как не буду, так как второе расширение представлено чисто в ознакомительных целях.
Если хотите поработать с ним, есть целая статья в первоисточнике - Как обойти и автоматически решить reCAPTCHA с использованием Puppeteer
Итак, все расширения готовы к тестированию, запускаем!
Распознавание капчи методом токенов или методом кликов - что быстрее?
Я сделал запись экрана во время работы расширений при решении токеном и при решении кликами и совместил их в одном видео, и перед тем, как показать результаты - несколько очевидных (для кого-то может и неочевидных) замечаний.
Скорость распознавания капчи. ее сложность и т.п. будут зависеть от заспамленности вашего ip адреса, поэтому, если хотите решать капчу быстрее, дополнительно понадобятся прокси, которые также могут взять на себя часть трат.
Говорят что если у вас хорошие прокси вообще может не потребоваться обходить капчу. Ну это только в том случае, если капча не стоит на странице по дефолту, а не появляется при наличии у системы подозрений, что вы, батенька (матушка) бот…
В целом же, хорошие прокси позволяют решать капчу быстрее. Я использовал свои домашний ip адрес.
В первом случае я сравнил скорость распознавания гугл капчи в рамках одного расширения и результат таков, что решение токеном быстрее, и судя по всему качественнее, результат вы можете видеть ниже.
По итогу токен решился за 18 секунд, а кликами за 1 минуту 10 секунд. И в дальнейшем у меня пару раз токеном даже получилось решить еще быстрее, а вот решить быстрее кликами, увы, уже не вышло…
Ну и в качестве сравнения я решил проверить как решает капчу кликами второе расширение, и в целом ситуация повторилась, скорость решения была достаточно низкая, при условии, что дело не в сервисе распознавания капчи, а в выбранном методе. Сервис отдавал ответ достаточно быстро, что можно увидеть на скринкасте, но вот рекапча снова и снова просила повторить.
Примечание - я намеренно ускорил время для второго расширения, так как рекапча была решена в итоге за 4 минуты.
Таким образом, для своих задач я бы все ж предпочел токен, по крайней мере если использовать puppeteer, с Селениумом попробую в следующий раз.