Решить reCAPTCHA 2 в Selenium

Как решить любую капчу при помощи Selenium с использованием плагина AntiCaptcha. Установка Selenium, настройка, примеры API запросов к плагину. Код представлен на Питоне.

На этой странице представлена краткая информация о том, как при помощи Selenium и плагина AntiCaptcha решить любую капчу (в том числе Рекапчу 2) в автоматическом режиме.
Мы пошагово установим Selenium на устройство и научимся подключать к нему наш плагин. Так же мы в автоматическом режиме решим Рекапчу на тестовом окружении.
Для тех, кто не знает, Selenium — инструмент автоматического запуска браузера и серфигнга в нем.

Тем же, кто уже знаком с Selenium предлагаем сразу посмотреть код примера по решению капчи.

Внимание! Для работы плагина необходим Anti-Captcha.com ключ учетной записи (Anti Captcha Api Key). Т.е. этот способ решения Рекапчи является платным. Но совсем не дорогим и очень удобным!

Больше информации о нашем расширении с примерами решения капч смотрите на главной странице AntiCaptcha плагина.

Тестовый код представлен на языке Python, так как он является самым популярным при использовании с Selenium.
Требуемый уровень компьютерной грамотности — средний.
В данной статье будут примеры исходного кода на языке Python, для понимания необходимо знание любого языка программирования и минимальный опыт работы с консолью.

Установка Python

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

В общем случае необходимо установить интерпретатор Питона (python) и прописать его в PATH, чтобы иметь возможность запускать его из консоли командой "python".
Для Windows рекомендуется поставить галочку "Add python.exe to Path" при установке. Тогда не придется каждый раз прописывать полный путь до python.exe и pip3.exe для их запуска. PIP - это Python Package Installer, т.е. менеджер пакетов для библиотек Python, который понадобится нам для установки Selenium.
После установки на Linux системах у вас появится выполняемый файл python3, для Windows это будет просто python.exe (без тройки на конце).
Для пользователей Linux: у вас может автоматически не установиться менеджер пакетов PIP, если это так, то просто установите его из менеджера пакетов вашего дистрибутива. Пример для Ubuntu: sudo apt install python3-pip.

Установка Selenium и WebDriver

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

Установка Selenium под Python

После установки Питона у Вас появится специальный питоновский пакетный менеджер (онлайн установщик библиотек из всей коллекции Питона) pip3.
Он и позволяет быстро поставить последнюю версию Селениума простой командой из консоли (Terminal или Cmd.exe).
pip3 install selenium
Для Windows она будет выглядеть так:
pip3.exe install selenium

В принципе это все.
Установку можно проверить запустив python3 или python.exe из командной консоли. И введя в терминале
from selenium import webdriver
Если после выполнения этой команды не появилось никакой ошибки, значит Селениум установился правильно. Можно выходить из интерпретатора Питона, CTRL+D для Линукс и CTRL+Z —> Enter для Windows.

На Windows может возникнуть ошибка вида "pip3.exe не найден". Значит Питон при установке не прописался в переменную PATH.
Вернитесь к шагу установки Python и отметьте галочку "Add python.exe to Path". Гуглите, если не поможет.

Установка Web Driver

Еще раз, Web Driver — это дополнительная прослойка для общения с браузером.
Наглядно:
Python использует Selenium как библиотеку, вызывает ее объекты и методы.
Selenium подключается к Веб Драйверу какого-то конкретного указанного браузера (Хром, Фаерфокс, и т.д.)
Веб Драйвер открывает обычный браузер Chrome или Firefox, которыми мы пользуемся в повседневной жизни, и транслирует команды от Селениума в него. Соответственно сам браузер должен быть установлен Вами заранее (скорее всего это уже сделано, т.к. Вы читаете эту страницу через браузер).

Веб Драйвер фактически представляет из себя файл, например chromedriver для Хрома, или geckodriver для Фаерфокса. Который будет скормлен библиотеке Селениума при инициализации.
Так что по факту его установка сводится к скачиванию файла и складыванию его в нужное место.
Не забудьте выбрать версию Веб Драйвера аналогичную версии баузера, для которого Вы его устанавливаете (просто откройте свой браузер Chrome или Firefox - в завиимости от того каким браузером будете пользоваться - и проверьте там версию).
Например для Хрома версии 68 требуется драйвер именно 68-й версии.

Приведем ссылки с более подробное информацией по его установке:
Установка драйвера geckodriver для Firefox Selenium
Установка драйвера chromedriver для Chrome Selenium
SELENIUM ДЛЯ PYTHON
Install Web Drivers

Корректность установки проверяется в интерпретаторе Питона. Запустите python3 или python.exe из консоли и наберите в нем:
Для Windows: from selenium import webdriver browser = webdriver.Chrome("C:\\mesto\\kuda\\skachali\\chromedriver.exe"
Для Linux from selenium import webdriver browser = webdriver.Chrome('/home/mesto/gde/lezit/chromedriver')
Если не появляется никакого сообщения об ошибке и открывается окно браузера — значит установка прошла успешно.

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

Решаем первую капчу в Selenium

Скачивание плагина AntiCaptha

В первую очередь нам необходимо зайти на страницу скачки плагина для решения капчи, выбрать браузер, на котором мы будем решать капчу (Хром, Фаерфокс) и скачать соответствующие файлы с кодом плагина.
Для Chrome это будут CRX или ZIP. Для Firefox — XPI формат, может подойти и ZIP, но лучше все-таки XPI.
Скачанный файл требуется положить в какую-нибудь директорию проекта, далее в нашем скрипте мы будем прописывать до него полный путь.

Код решения рекапчи на Selenim под Python

Предварительно можете ознакомиться с примерами запуска браузера под Selenium по ссылкам ниже.
Мы же сосредоточимся на конкретном примере. Больше информации Вы сможете почерпнуть по тем же ссылкам или в Гугле.
Современная Веб-Автоматизация при Помощи Python и Selenium: Пробный запуск браузера
Python Selenium Getting Started

Остановимся на одном моменте. Для работы плагина необходим Anti-Captcha.com ключ учетной записи (Anti Captcha Api Key).
Обычно он вручную выставляется в опциях плагина каждым нашим пользователем. При работе через Selenium такой возможности нет.
Для установки ключа используется отправка API сообщений в плагин, а именно метод setOptions.
Метод acp_api_send_request в коде ниже как раз отправляет подобное сообщение в строке номер 43.

Отметим, что помимо вышеуказанного, есть и более явный способ прописать API ключ сервиса Антикапчи. Какой удобнее выбирать вам.

Итак, выполните представленный ниже код в интерпретаторе Питона (python3 или python.exe), предварительно поменяв пути до файлов плагина и chromedriver'а, а также вписав свой ключ учетной записи Anti-Captcha.

Представленный ниже код снабжен комментариями на русском языке.

# Импортируем необходимые объекты from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait import time import json # Метод отправки API запроса прямо в плагин # Например для инициализации API ключа сервиса anti-captcha.com, необходимый для работы плагина # Работает только на действующей HTML страничке, # в нашем случае на https://antcpt.com/blank.html # на страницах вроде about:blank запрос не пройдет def acp_api_send_request(driver, message_type, data={}): message = { # всегда указывается именно этот получатель API сообщения 'receiver': 'antiCaptchaPlugin', # тип запроса, например setOptions 'type': message_type, # мерджим с дополнительными данными **data } # выполняем JS код на странице # а именно отправляем сообщение стандартным методом window.postMessage return driver.execute_script(""" return window.postMessage({}); """.format(json.dumps(message))) # Инциируем объект опций для Хрома, чтобы иметь возможность подключить расширение options = webdriver.ChromeOptions() # Ссылка на CRX или ZIP или ZPI файл плагина, который мы скачали ранее options.add_extension('/put/na/fail/plagina/anticaptcha.crx') # Запускаем Браузер (Веб Драйвер Хрома) с указанием места скачивания самого файла драйвера browser = webdriver.Chrome('/home/mesto/gde/lezit/chromedriver', options=options) # Переходим на пустую страницу для выполнения API запроса к плагину browser.get('https://antcpt.com/blank.html') # Устанавливаем API ключ anti-captcha.com # замените YOUR-ANTI-CAPTCHA-API-KEY на Ваш шестнадцатиричный ключ, который можно взять тут: # https://anti-captcha.com/clients/settings/apisetup acp_api_send_request( browser, 'setOptions', {'options': {'antiCaptchaApiKey': 'YOUR-ANTI-CAPTCHA-API-KEY'}} ) # Три секунды паузы чтобы плагин проверил ключ на стороне anti-captcha.com time.sleep(3) # Переходим на тестовую форму с Рекапчей 2 browser.get('https://antcpt.com/rus/information/demo-form/recaptcha-2.html') # Тестовый ввод в инпут browser.find_element_by_name('demo_text').send_keys('Test input') # Самая важная чаcть: ждем не более 120 секунд пока индикатор антикаптчи с классом antigate_solver # не получит класс solved, что означает что рекапча решена WebDriverWait(browser, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved')) # Отправляем форму browser.find_element_by_css_selecor('input[type=submit]').click()

Сохраним наш код в файл captcha_solve.py и выполним в консоли команду:

python3 captcha_solve.py

Если все пошло нормально, то откроется браузер и начнет магическим образом решать Капчу =)

Способ явного прописывания ключа сервиса Антикапчи

По запросам наших пользователей мы реализовали альтернативный способ указания API ключа — через прописывание его в конфигурационном файле.
Для этого необходимо скачать код плагина в ZIP формате и распаковать этот архив. Внутри, в директории js вы найдете файл config_ac_api_key.js.
Откройте его в любом редакторе и в значение переменной antiCapthaPredefinedApiKey впишите ваш anti-captcha.com API ключ.
Например:
var antiCapthaPredefinedApiKey = '12345678901234567890123456789012';

Обратите внимание, что помимо ключа в этом файле присутствует еще переменная defaultConfig, в которой перечислены значения всех опций плагина по умолчанию. Не стесняйтесь менять их по своему усмотрению, описание значения каждой конкретной опции можете подглядеть в статье по работе с API нашего плагина, в методе setOptions.
Разве что в статье имена опций представлены в camelCase, а в файле настроек через_подчеркивания (useRecaptchaPrecaching ~ use_recaptcha_precaching).

Последнее, что надо сделать — запаковать обратно весь код плагина в ZIP архив и указать путь именно до него в методе add_extension (смотрите выше наш файл captcha_solve.py).
Ну и, конечно, строки начиная с 37 по 50 нам в этом случае не нужны.

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