Распознавание капчи: что быстрее — токен или клики? Практическое сравнение

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

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

Распознавание капчи: что быстрее — токен или клики? Практическое сравнение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В файле 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();

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

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

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

Распознавание капчи: что быстрее — токен или клики? Практическое сравнение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

11
4 комментария

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

Просто в тему вчера вот такая капча попалась

Как сказал классик - "Ненавижу, блять, цыган"

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