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