Инструкция: Как автоматически решить и обойти reCAPTCHA в Selenium
Далее пошагово описан процесс решения reCAPTCHA на странице https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php:
- Установка требуемых компонентов
- Поиск специального параметра site key на целевой странице
- Отправка reCAPTCHA для решения
- Получение ответа от API для обхода капчи
Установка компонентов
Начать нужно с установки следующих компонентов:
- 2Captcha: официальный Python SDK для интеграции с API 2Captcha
- Selenium: Selenium — это библиотека автоматизации браузера
- webdriver-manager: эта библиотека упрощает загрузку и использование драйверов для Selenium.
Следующая команда позволит установить указанные библиотеки:
python -m pip install 2captcha-python selenium webdriver-manager
Далее на целевой странице нужно найти параметр site key
и написать код скрипта для автоматического решения капчи на странице.
Поиск параметра site key
site key
— это уникальный идентификатор, который Google присваивает всем формам с reCAPTCHA, и который однозначно идентифицирует капчу. Для автоматического решения капчи нужно отправить site key
в сервис решения.
Чтобы найти параметр site key
на странице, нужно выполнить следующие действия:
- Откройте https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
- Откройте инструменты разработки, нажав Ctrl/Cmd + Shift + I.
- Найдите
data-sitekey
и скопируйте значение параметра. - Сохраните значение, чтобы использовать его при отправке запроса для решения капчи на странице
Решение капчи
Далее нужен код Selenium, задачей которого является открытие целевой страницы и автоматическое решение капчи с помощью API.
Не забудьте изменить значение параметра 2CAPTCHA_API_KEY
на реальный ключ API и SITE_KEY
на соответствующий site key
, сохраненный ранее.
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}")
В коде инициализирован объект TwoCaptcha
с ключом API и решение reCAPTCHA посредством вызова метода recaptcha
. Для решения передано значение site key
и URL адрес страницы
.
Обратите внимание, что процесс решения капчи может занять некоторое время. Скорость решения приведена на странице reCAPTCHA bypass.
Отправка решенной капчи
Далее находим элемент g-recaptcha-response
, вставляем полученное значение для решения капчи и отправляем форму.
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()
Итоговый код автоматического ре шения reCAPTCHA
Ниже приведен готовый полный код по автоматическому обходу капчи с использованием API.
from selenium.webdriver.common.by import By
from twocaptcha import TwoCaptcha
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
# Instantiate the WebDriver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# Load the target page
captcha_page_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.get(captcha_page_url)
# Solve the Captcha
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}")
# Set the solved Captcha
recaptcha_response_element = driver.find_element(By.ID, 'g-recaptcha-response')
driver.execute_script(f'arguments[0].value = "{code}";', recaptcha_response_element)
# Submit the form
submit_btn = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_btn.click()
# Pause the execution so you can see the screen after submission before closing the driver
input("Press enter to continue")
driver.close()
При использовании данного кода обязательно замените значения параметров2CAPTCHA_API_KEY
, SITE_KEY
.