///
Python ReCaptcha v.2
9 августа 2024 г.

Как решить 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). Если все правильно, должен получиться такой результат:

none provided

NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.

ItGuy
geear
Партнёрская программа для разработчиков софта
Зарабатывайте до 30% от трат ваших пользователей на обход капчи
✅ Заявка отправлена
Спасибо за интерес к нашей партнёрской программе! Мы свяжемся с вами в течение 7 рабочих дней.
Заявка на подключение
Заполните форму, чтобы отправить заявку на подключение к партнёрской программе
Больше статей