Когда речь заходит об обходе капчи на Python, кажется, что сложного в этом? Однако на практике возникает множество нюансов.
Хотя сам я не являюсь разработчиком, но окружён этими людьми и часто участвую в дискуссиях, касающихся программирования.
Недавно передо мной встал вопрос: как реализовать решение капчи на Python для крупного проекта, связанного с парсингом данных с Amazon. Я испробовал множество вариантов, потратил часы на настройки, обратился даже к искусственному интеллекту в лице ChatGPT, но не смог добиться стабильного обхода капчи Amazon.
После коллективных мозговых штурмов (большая часть усилий была с моей стороны, а решение предложил коллега) был написан скрипт, который теперь может обойти капчу на Python. Мы решили сделать его доступным сообществу в надежде на обратную связь и советы по оптимизации, так как проблемные моменты всё ещё возникают. Мы уже перепробовали несколько подходов, но скрипт не демонстрирует стабильную работу. Если у вас есть идеи, как улучшить этот процесс, буду благодарен за помощь.
Принцип работы скрипта для обхода капчи на Python
Скрипт для решения капчи на Python выполняет несколько последовательных шагов, каждый из которых имеет важное значение для конечного результата. Вот как он работает:
Импортирует необходимые библиотеки для работы.
Настраивает подключение через прокси.
Открывает страницу регистрации на Amazon.
Решает первую капчу (если она присутствует, иначе этот шаг пропускается).
Заполняет регистрационную форму.
Решает вторую капчу, используя координатный метод.
Проверяет корректность решения капчи.
Закрывает браузер.
Теперь давайте разберёмся с каждым пунктом подробнее, чтобы лучше понять, как работает данный скрипт.
Библиотеки, необходимые для обхода капчи на Python
Этот скрипт требует установки и использования нескольких ключевых библиотек:
os, base64, BytesIO — стандартные библиотеки Python, которые используются для работы с файловой системой, кодирования изображений в формат base64 и работы с потоками байтов. Этот набор библиотек используется для обхода капчи, представленной в виде изображения.
seleniumbase.Driver, selenium.webdriver.common.by.By, selenium.webdriver.common.action_chains.ActionChains — эти библиотеки отвечают за управление браузером через Selenium, поиск элементов на веб-странице и выполнение сложных действий, таких как клик по координатам. Selenium здесь является центральной библиотекой, которая управляет всеми взаимодействиями с капчей, поэтому она особенно важна.
TwoCaptcha — это библиотека, которая интегрируется с сервисом 2Captcha, предназначенным для автоматического распознавания капчи. Таким образом, для решения капчи на Python мы используем сторонний сервис, который возвращает готовый результат.
Настройка прокси для скрипта
Изначально скрипт был настроен на загрузку прокси из файла, но для упрощения была добавлена возможность указания прокси непосредственно в коде. Если файл с прокси отсутствует, скрипт автоматически подгружает прокси из кода. А если не удаётся найти прокси ни в файле, ни в коде, то скрипт завершает работу, что, в общем-то, логично — обход капчи без использования прокси в современных реалиях малоэффективен, особенно при больших объёмах запросов.
После подключения прокси скрипт открывает страницу регистрации на Amazon при помощи функции driver.uc_open_with_reconnect. Основная цель скрипта — это регистрация на сайте, но перед этим нужно пройти капчу.
Решение первой капчи на Python
Здесь начинается самое интересное. Если на странице появляется простая текстовая капча, скрипт находит её с помощью Selenium, делает скриншот изображения, преобразует его в формат base64 и отправляет на сервис 2Captcha для решения. После получения ответа скрипт подставляет результат в нужное поле и нажимает кнопку "Продолжить". Если капча отсутствует, этот шаг просто пропускается, и скрипт переходит к следующему этапу.
Заполнение формы регистрации
Как только капча пройдена или пропущена, скрипт возвращается к заполнению регистрационной формы. Данные для формы берутся из кода, что делает процесс полностью автоматизированным. Однако на данном этапе есть простор для доработки — можно интегрировать функцию загрузки данных для формы из внешнего файла, что позволит многократно автоматизировать процесс регистрации.
Решение второй капчи с использованием координатного метода
Теперь рассмотрим второй этап решения капчи. Вторая капча, как правило, сложнее — она требует точного указания координат для клика. Принцип работы скрипта следующий: делается скриншот капчи, который отправляется на сервис для определения координат. После получения координат скрипт перемещает курсор в нужную точку с помощью ActionChains, переключается во фрейм и нажимает кнопку подтверждения.
Здесь и возникает проблема: иногда процесс «зависает» на этапе распознавания или проверки капчи, либо капча не решается вовремя, и она обновляется. Это становится главной причиной нестабильности работы скрипта. В большинстве случаев скрипт работает корректно, но такие «зависания» не дают покоя, и я надеюсь на ваши советы по улучшению этого процесса.
Обход капчи Python – раздел которого в коде нет
У Амазон еще есть третий вид капчи, Фанкапча, и я не смог победить ее в данном контексте, поэтому просто выпилил из этого кода на всякий случай. Да и Фанкапча за все время тестирования мне так ни разу не встретилась (но из разговоров мудрейших я знаю что она там есть, где то в чертогах Амазона). Ходят легенды, что есть специально обученный мужик, назовем его просто СОМ, который руками меняет условия для обхода капчи, либо дизайн страницы.
Никто этого СОМа никогда не видел, но у вечерами, когда ITшники собираются у костра этой байкой пугают джунов.
Заключение и итоги
В итоге можно сказать, что скрипт для обхода капчи на Python работает, но не без проблем. Основная трудность заключается в нестабильной работе при решении второй капчи. Fan-капча также не решается этим скриптом — я пока не смог побороть её и решил выпилить этот функционал. Тем не менее, скрипт решает основные задачи, и если есть идеи по улучшению кода — буду рад увидеть ваши рекомендации в комментариях.
Пока же остаётся открытым вопрос: как добиться полной стабильности при работе с капчами на Amazon и справиться с Fan-капчей, если она вдруг появится?
Заключительный код скрипта для решения капчи на Python.