Делаю робкие попытки в автоматизации и столкнулся с часто возникющей проблемой, распознавание Рекапчи (reCaptcha).
Естественно, я понимаю что по даннй теме написано много гайдов, мануалов и статей, но согласитесь — интересно описать собственный опыт.
Итак, за основу я взял англоязычный мануал, который попался мне на глаза буквально пару дней назад и я решил его потестить (а так как написан он сервисом по распознаванию капчи, который я и использую, то почему нет — кстати, ребята из 2капча — принимаю благодарность в виде зеленых бумажек, если интересно))))
Итак, не будем долго и нудно расписывать, зачем и почему нужен Селениум, как это важно для автоматизации и кога он возник и кто его придумал, переходим к самой сути:
Для решения возьмем демо страницу, любезно предоставленную самой Рекапчей — https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php:
Подготовка
На первом этапе необходимо все подготовить
Для демонстрации работы я скачал следующие компоненты в специальную папку на своем компьютере (предварительно установил, конечно же Питон — но как я это сделал рассказывать не буду, надеюсь разберетесь).
Итак, нам понадобится — собственно сама библиотека для автоматизации браузера Селениум, берем тут — https://pypi.org/project/selenium/
Официальный Python SDK для интеграции с API 2Captcha, берем тут https://pypi.org/project/2captcha-python/
SeleniumИ библиотека, которая упрощает загрузку и использование драйверов для Selenium, называется webdriver-manager, берем тут — https://pypi.org/project/webdriver-manager/
Установка webdriver-manager
Устанавливается все очень просто, копируете указанную команду и вставляете в консоли, как показано на видео выше
Можно устанавливать все по отдельности, как это сделал я а можете использовать универсальную команду
Поиск Sitekey
Так как речь идет про Рекапчу, то необходимо понимать, что такое параметр site key. Sitekey — это уникальный идентификатор, который Google присваивает всем своим формам с reCAPTCHA, и с помощью которого мы можем идентифицировать капчу на сайте.
Именно этот идентификатор и нужен нам, чтобы сервис распознавания капчи мог понять, с чем он имеет дело, и именно этот идентификатор мы и будем отправлять в 2капча.
Чтож, давайте искать sitekey на демо странице
- Переходим на https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
- Откройте инструменты разработки — нажать Ctrl/Cmd + Shift + I либо правую кнопку мыши — посмотреть код
- Найдите data-sitekey (нажмите ctrl + F, введите sitekey и нажмите enter) и скопируйте значение параметра.
- Сохраните значение, чтобы использовать его при отправке запроса для решения капчи на странице
Решение капчи
Естественно, для решения капчи нужно написать код — можете написать его самостоятельно, либо просто взять из уже готового мануала. Типа как из этого. Задача данного кода — попасть на целевую страницу и решить капчу через API. Именно то, чего мы и хотим достичь.
Сразу оговорюсь, в коде есть несколько параметров, которые необходимо изменить на свои, вот они сверху вниз:
2CAPTCHA_API_KEY- ваш АПИ, берете его в личном кабинете 2капча.
SITE_KEY- его мы с вами сохраняли на предыдущем шаге
Я очень сильно расчитываю, что найти эти параметры в приведенном коде вы сможете самостоятельно
captcha_page_url = «https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php»
driver.get(captcha_page_url)
# решение капчи
print(«solving captcha») Этот кусок кода инициализирует объект TwoCaptcha с нашим ключом API и должен решать reCAPTCHA посредством вызова метода recaptcha. Для чего передаем значение site key и URL адрес страницы. Это не полный код, читай дальше! Следующий кусок кода я не понял как вам правильно объяснить, так как сам не понял что происхоит, поэтому просто перевел его и оставляю тут: Далее находим элемент g-recaptcha-response, вставляем полученное значение для решения капчи и отправляем форму. submit_btn = driver.find_element(By.CSS_SELECTOR, ‘button[type=»submit»]’) input(«Press enter to continue») Собственно вот что мы получаем в результате. # Instantiate the WebDriver # Load the target page # Solve the Captcha # Set the solved Captcha # Submit the form # Pause the execution so you can see the screen after submission before closing the driver Для того, чтобы продемонстрировать работоспособность кода, создам текстовый файл, назову его script.py и запущу в консоли. Результат вы можете увидеть ниже Для чистоты эксперимента решим этим же способом рекапчу с демо страницы, расположенной на сайте 2капча. Нам понадобится поменять урл в коде и sitekey, смотрим что получилось: Таким образом мы видим, что код рабочий. Пользуйтесь, но сперва не забудьте поблагодарить лайком автора.
solver = TwoCaptcha(«2CAPTCHA_API_KEY»)
response = solver.recaptcha(sitekey=’SITE_KEY’, url=captcha_page_url)
code = response[‘code’]
print(f»Successfully solved the Captcha. The solve code is {code}»)
Отправка решенной капчи
driver.execute_script(f’arguments[0].value = «{code}»;’, recaptcha_response_element)
submit_btn.click()
driver.close()
Полный код для автоматического решения reCaptcha
from twocaptcha import TwoCaptcha
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
captcha_page_url = «https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php»
driver.get(captcha_page_url)
print(«Solving Captcha»)
solver = TwoCaptcha(«2CAPTCHA_API_KEY»)
response = solver.recaptcha(sitekey=’SITE_KEY’, url=captcha_page_url)
code = response[‘code’]
print(f»Successfully solved the Captcha. The solve code is {code}»)
recaptcha_response_element = driver.find_element(By.ID, ‘g-recaptcha-response’)
driver.execute_script(f’arguments[0].value = «{code}»;’, recaptcha_response_element)
submit_btn = driver.find_element(By.CSS_SELECTOR, ‘button[type=»submit»]’)
submit_btn.click()
input(«Press enter to continue»)
driver.close()



