Как обойти FunCaptcha с помощью Python и 2Captcha

В этом руководстве я покажу, как решать FunCaptcha с помощью Python и API сервиса распознавания капчи 2Captcha.

FunCaptcha — такой тип CAPTCHA, который требует взаимодействия, похожего на человеческое. То есть необходимо не только решить капчу, но и не спровоцировать ее на подозрение к вам (вашему боту), в нечеловеческом поведении. Давайте разберем решение на простые шаги.

Исходный код, а также всю необходимую информацию, можно найти в репозитории 2капчи по ссылке.

Предварительные требования

Для начала убедитесь, что у вас есть установлены:

  • Python.
  • Необходимые библиотеки Python: seleniumbase, twocaptcha, и requests.

А также есть оплаченный API-ключ 2Captcha (с этим разберетесь самостоятельно).

Для установки требуемых библиотек, выполните команду:

pip install seleniumbase twocaptcha requests

Я выполняю ее в терминале в той папке, в которой у меня установлен скрипт для решения капчи (может это и не обязательно, я делаю так и у меня все работает).

Шаг 1: Настройка Python-окружения

Сначала импортируем необходимые библиотеки для взаимодействия с веб-страницей и решения CAPTCHA:

import os import requests from seleniumbase import Driver from selenium.webdriver.common.by import By from twocaptcha import TwoCaptcha

Описание библиотек:

  • seleniumbase: обертка для Selenium, упрощающая автоматизацию браузера.
  • twocaptcha: клиент Python для API 2Captcha, который поможет решить CAPTCHA.
  • requests: используется для получения необходимых атрибутов для решения FunCaptcha.

Шаг 2: Инициализация API 2Captcha и WebDriver

Настраиваем решатель 2Captcha и Selenium WebDriver. API_KEY берется из переменных окружения. Замените его реальным ключом API (берется из личного кабинет 2капчи, на главной странице):

API_KEY = os.environ["APIKEY"] # Замените на ваш ключ API 2Captcha solver = TwoCaptcha(API_KEY) agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/125.0.0.0 Safari/537.36" driver = Driver(uc=True, proxy=False, headless=False, agent=agent)

Параметры:

  • uc=True позволяет использовать Undetected ChromeDriver для обхода механизмов обнаружения ботов.
  • headless=False включает интерфейс браузера для отладки (можно изменить на True для работы в фоновом режиме).

Шаг 3: Открытие веб-сайта

Загружаем веб-сайт с FunCaptcha. Замените URL на целевой:

url = "https://example.com/login" # Замените на URL целевого сайта driver.open(url)

Шаг 4: Ввод учетных данных

Если CAPTCHA появляется после входа, вводим учетные данные. Пример с заменой на ваши данные:

driver.type("#username", "your_email@example.com") driver.type("#password", "your_password")

Шаг 5: Обнаружение фрейма FunCaptcha

Проверяем наличие FunCaptcha на странице:

try: frame1 = driver.find_element(By.ID, "captcha-internal") print("Captcha найдена")

Если CAPTCHA найдена, продолжаем к следующему шагу.

Шаг 6: Извлечение атрибутов FunCaptcha

Извлекаем sitekey, surl и data_blob:

sitekey = "your-sitekey-here" # Замените на реальный sitekey driver.switch_to.frame(frame1) driver.switch_to.frame("arkoseframe") frame3 = driver.find_element(By.CLASS_NAME, "r34K7X1zGgAi6DllVF3T.show.active.inline") arkose_client = requests.get(frame3.get_attribute("src").split("#")[0].replace("html", "js")).text.split(";")[0] arkose_client = arkose_client.split(" ")[1] print("arkoseClient: ", arkose_client)

Шаг 7: Извлечение данных для решения CAPTCHA

Получаем данные через JavaScript:

Шаг 8: Решение FunCaptcha с помощью API 2Captcha

Отправляем данные в API 2Captcha:

result = solver.funcaptcha( sitekey=sitekey, url=driver.current_url, surl=surl, **{'data[blob]': data_blob}, ) solution = result["code"] # Извлекаем решение print("Captcha решена!")

Шаг 9: Вставка решения CAPTCHA

Вставляем решение в соответствующие поля:

driver.execute_script("document.getElementsByName('verification-token')[0].value = arguments[0];", solution) driver.execute_script("document.getElementsByName('fc-token')[0].value = arguments[0];", solution) driver.switch_to.default_content() el = driver.find_element(By.NAME, "captchaUserResponseToken") driver.execute_script(f"arguments[0].setAttribute('value', '{solution}');", el)

Шаг 10: Отправка формы и закрытие браузера

Завершаем процесс:

driver.execute_script("document.getElementById('captcha-challenge').submit();") driver.sleep(10) # Ожидаем отправки формы driver.close() driver.quit()

Устранение неполадок

  • Проверка API-ключа: Убедитесь, что ваш ключ 2Captcha действителен.

  • Использование прокси: Если возникают ограничения, применяйте прокси.

  • Изменения CAPTCHA: При изменении конфигурации сайта обновите код.

Заключение

Следуя этим шагам, вы сможете автоматически решать задачи FunCaptcha с помощью Python и API 2Captcha. Этот метод подходит для различных сайтов, использующих FunCaptcha.

Начать дискуссию