Looking for international version of our service? Go to 2captcha.com

Логотип «RuCaptcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

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

Катя Пушкаренва

Технический специалист

В этом руководстве мы покажем, как решать задачи FunCaptcha с помощью Python и API RuCaptcha. FunCaptcha — это тип CAPTCHA, который требует взаимодействия, похожего на человеческое. Давайте разберем решение на простые шаги.

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

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

Перед началом убедитесь, что у вас есть следующее:

  • Установленный Python.
  • Действительный API-ключ от RuCaptcha.
  • Необходимые библиотеки Python: seleniumbase, twocaptcha, и requests.

Чтобы установить требуемые библиотеки, выполните команду:

bash Copy
pip install seleniumbase twocaptcha requests

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

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

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

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

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

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

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

python Copy
API_KEY = os.environ["APIKEY"]  # Замените на ваш ключ API RuCaptcha  
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 на целевой:

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

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

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

python Copy
driver.type("#username", "[email protected]")  
driver.type("#password", "your_password")

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

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

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

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

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

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

python Copy
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:

python Copy
data_all = driver.execute_script(f"return {arkose_client}.state")  
data_blob = data_all["config"]["data"]["blob"]  
surl = data_all["config"]["pageLevel"]["surl"]

print("surl: ", surl)  
print("data_blob: ", data_blob)

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

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

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

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

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

python Copy
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: Отправка формы и закрытие браузера

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

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

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

  • Проверка API-ключа: Убедитесь, что ваш ключ RuCaptcha действителен.
  • Использование прокси: Если возникают ограничения, применяйте прокси.
  • Изменения CAPTCHA: При изменении конфигурации сайта обновите код.

Заключение

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