Как решить ReCaptcha v2 на Python с помощью Selenium & CapMonster Cloud
Если вы хотите написать скрипт для автоматического разгадывания разных типов капч на языке Python, то для начала вам нужно будет скачать последнюю версию Python с официального сайта.
Следующие шаги:
Создаем папку в удобном месте, перейдем в VS Code и добавим эту папку в наш новый проект (File – Open folder).
Для добавления зависимости Selenium заходим на сайт https://www.selenium.dev/downloads/, выбираем python, копируем строчку сверху pip install selenium, открываем терминал в нашем проекте (View – Terminal), вставляем туда эту строчку, нажимаем Enter и ждем установки зависимости.
Теперь нужно добавить библиотеку от CapMonster Cloud, всю информацию о ней можете узнать здесь – https://pypi.org/project/capmonstercloudclient/. Скопируйте строчку pip install capmonstercloudclient и точно так же добавьте через терминал в проект. Проверить все установленные зависимости можно через команду pip list.
Создаем новый файл под названием “.env” и туда прописываем такие значения:
API_KEY="ВАШ_API_KEY"
WEBSITE_KEY="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
WEBSITE_URL="https://google.com/recaptcha/api2/demo"
Для примера мы берем сайт google.com/recaptcha/api2/demo, на нем есть капча, которую мы собираемся решить с помощью CapMonster Cloud, для нее имеется идентификатор sitekey. API_KEY - это ваш API-ключ от CapMonster Cloud, введите его в соответствующую строку и сохраните в файле “.env”.
Создайте файл “main.py” и импортируйте все необходимые модули, зависимости и настройки переменных окружения из файла “.env” (у вас в зависимостях должен быть установлен dotenv):
import asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
from dotenv import load_dotenv
import os
load_dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_KEY")
Далее пишем код для запуска браузера (в нашем примере мы используем webdriver.Chrome, у вас может быть другой драйвер, не забывайте об этом!), создания задачи для решения капчи и вставки результата на целевой сайт:
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# Создание запроса на решение reCAPTCHA типа V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
result = await cap_monster_client.solve_captcha(recaptcha_request)
return result['gRecaptchaResponse']
async def main():
try:
# Запуск браузера Chrome с помощью Selenium
browser = webdriver.Chrome()
# Открытие веб-сайта
browser.get(WEBSITE_URL)
print('Страница открыта, ожидание загрузки reCAPTCHA...')
# Подождать некоторое время для загрузки CAPTCHA (можно настроить длительность)
await asyncio.sleep(5)
# Решение reCAPTCHA с использованием CapMonster
responses = await solve_captcha()
print('Ответ от CapMonster:', responses)
# Вставка решенного reCAPTCHA в страницу
browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses}";')
print('Результат вставлен на страницу!')
# Выполнение дополнительных действий при необходимости (например, отправка формы)
browser.find_element(By.ID, 'recaptcha-demo-submit').click()
print('Форма отправлена!')
# Подождать некоторое время для наблюдения за изменениями
await asyncio.sleep(10)
except Exception as e:
print('Ошибка:', e)
finally:
# Закрытие браузера
browser.quit()
# Запуск асинхронного цикла событий
asyncio.run(main())
Вот так выглядит весь код:
import asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
from dotenv import load_dotenv
import os
# Загрузка переменных окружения из файла .env
load_dotenv()
API_KEY = os.getenv("API_KEY")
WEBSITE_URL = os.getenv("WEBSITE_URL")
WEBSITE_KEY = os.getenv("WEBSITE_KEY")
# Настройка клиента CapMonster
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
async def solve_captcha():
# Создание запроса на решение reCAPTCHA типа V2 Proxyless
recaptcha_request = RecaptchaV2ProxylessRequest(websiteUrl=WEBSITE_URL, websiteKey=WEBSITE_KEY)
result = await cap_monster_client.solve_captcha(recaptcha_request)
return result['gRecaptchaResponse']
async def main():
try:
# Запуск браузера Chrome с помощью Selenium
browser = webdriver.Chrome()
# Открытие веб-сайта
browser.get(WEBSITE_URL)
print('Страница открыта, ожидание загрузки reCAPTCHA...')
# Подождать некоторое время для загрузки CAPTCHA (можно настроить длительность)
await asyncio.sleep(5)
# Решение reCAPTCHA с использованием CapMonster
responses = await solve_captcha()
print('Ответ от CapMonster:', responses)
# Вставка решенного reCAPTCHA в страницу
browser.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{responses}";')
print('Результат вставлен на страницу!')
# Выполнение дополнительных действий при необходимости (например, отправка формы)
browser.find_element(By.ID, 'recaptcha-demo-submit').click()
print('Форма отправлена!')
# Подождать некоторое время для наблюдения за изменениями
await asyncio.sleep(10)
except Exception as e:
print('Ошибка:', e)
finally:
# Закрытие браузера
browser.quit()
# Запуск асинхронного цикла событий
asyncio.run(main())
Объяснение кода:
load_dotenv() используется для загрузки переменных окружения из файла .env.
os.getenv("API_KEY"), os.getenv("WEBSITE_URL"), и os.getenv("WEBSITE_KEY") используются для получения значений соответствующих переменных окружения из файла .env.
ClientOptions(api_key=API_KEY) создает объект ClientOptions с заданным API-ключом для CapMonster.
CapMonsterClient(options=client_options) создает клиент CapMonster с заданными опциями.
async def solve_captcha(): эта функция создает запрос на решение CAPTCHA типа reCAPTCHA V2 Proxyless, используя CapMonster.
Возвращает значение gRecaptchaResponse, которое представляет решение CAPTCHA.
async def main(): основная асинхронная функция, которая выполняет основной сценарий.
Запускает браузер Chrome с помощью Selenium, открывает веб-сайт, ожидает загрузки reCAPTCHA.
Вызывает solve_captcha() для решения CAPTCHA с использованием CapMonster.
Вставляет решенную CAPTCHA на страницу, выполняет дополнительные действия (например, отправка формы), и затем ожидает изменений.
Ловит и выводит ошибку, если что-то идет не так.
Закрывает браузер после выполнения всех действий.
asyncio.run(main()) запускает основную асинхронную функцию main() с использованием asyncio.run(), что позволяет запускать асинхронный код в стиле сценария.
Запускаем наш скрипт. Если появляются какие-либо ошибки, запустите отладку (Run and Debug). Если все правильно, должен получиться такой результат:
NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.