Уведомление об использовании файлов cookie

Этот сайт использует cookie. Файлы cookie запоминают вас, поэтому мы можем предоставить вам персонализированные услуги. Подробнее.

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

Обход капчи Turnstile Challenge на Python и Selenium

Обход проблемы Cloudflare с помощью pyhton
Сервис ruCaptcha помогает автоматически решать капчи Turnstile Challenge. Статья описывает процесс взаимодействия с API.

Материал полезен для python разработчиков, которые работают над проектами, требующими автоматизации задач, связанных с сайтами, защищенными Turnstile Challenge капчей.

Что такое Turnstile Challenge капча?

Turnstile — это Cloudflare капча, которая призвана блокировать ботов и автоматизированные системы. Она является простой в решении для обычных пользователей, но сложной для распознавания ботами и автоматическими системами.

Пример того как выгглядит Turnstile Challenge:

Cloudflare Challenge Page Screenshot

Подготовка к обходу капчи Turnstile

Прежде чем начать обход капчи Turnstile, необходимо подготовить рабочее окружение и инструменты. Для этого нам понадобятся:

  • Python и библиотека SeleniumBase для автоматизации веб-браузера.
  • 2captcha API ключ для решения капчи.
  • Прокси (опционально), если требуется обходить капчу с различных IP-адресов.

Шаги обхода капчи Turnstile

1. Подключение необходимых библиотек и зависимостей:

Перед выполнением обхода капчи Turnstile требуется подключить необходимые библиотеки, такие как json, re, requests, seleniumbase, и time. Эти библиотеки используются для работы с данными в формате JSON, выполнения регулярных выражений, отправки HTTP-запросов, автоматизации браузера и добавления задержек в коде.

import json
import re
import requests
from seleniumbase import Driver
from selenium.webdriver.common.by import By
import time

2 Начало работы скрипта:

Этот шаг включает определение URL сайта, защищенного капчей Turnstile, установку прокси (при необходимости), API ключа 2captcha, установку актуального UserAgent, и настройку веб-драйвера для работы в режиме headless.

proxy = "xxxxxx:[email protected]:xxxx"  # YOUR_2CAPTCHA_PROXY
my_key = "your_2captcha_api_key"

# Установка актуального UserAgent
agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"

# Настройка веб-драйвера для работы в безголовом режиме
driver = Driver(uc=True, log_cdp=True, headless=True, no_sandbox=True, agent=agent, proxy=False)

# URL сайта, защищенного капчей Turnstile
url = "URL сайта, защищенного капчей Turnstile"
driver.get(url)
time.sleep(5)

3. Перехват параметров капчи Turnstile:

Далее переопределяем метод turnstile.render и console.clear, чтобы выводить необходимые параметры капчи в консоль браузера. Также определяем callback функцию,
которая понадобится для отправки токена.

# Функция для перехвата параметров капчи с помощью JavaScript
def intercept(driver):
    driver.execute_script("""
    console.clear = () => console.log('Console was cleared')
    const i = setInterval(()=>{
    if (window.turnstile)
     console.log('success!!')
     {clearInterval(i)
         window.turnstile.render = (a,b) => {
          let params = {
                sitekey: b.sitekey,
                pageurl: window.location.href,
                data: b.cData,
                pagedata: b.chlPageData,
                action: b.action,
                userAgent: navigator.userAgent,
                json: 1
            }
            console.log('intercepted-params:' + JSON.stringify(params))
            window.cfCallback = b.callback
            return        } 
    }
},50)    
""")
    time.sleep(1)
    # Получение логов браузера, где будут содержаться перехваченные параметры
    logs = driver.get_log("browser")
    for log in logs:
        if log['level'] == 'INFO':
            if "intercepted-params:" in log["message"]:
                log_entry = log["message"].encode('utf-8').decode('unicode_escape')
                match = re.search(r'"intercepted-params:({.*?})"', log_entry)
                json_string = match.group(1)
                params = json.loads(json_string)
                return params

4. Отправка параметров на сервер 2captcha API:

Получив необходимые параметры капчи, отправляем их на сервер 2captcha с помощью API запроса.

data0 = {"key": my_key,
         "method": "turnstile ",
         "sitekey": params["sitekey"],
         "action": params["action"],
         "data": params["data"],
         "pagedata": params["pagedata"],
         "useragent": params["userAgent"],
         "json": 1,
         "pageurl": params["pageurl"],
         }
response = requests.post(f"https://2captcha.com/in.php?", data=data0)
print("Запрос отправлен", response.text)
s = response.json()["request"]

5. Использование результата решения капчи

После отправки запроса на сервер 2captcha, необходимо дождаться результата решения капчи. Делая запросы к серверу раз в 5-10 секунд , чтобы узнать, решена ли капча. Когда капча успешно решена, API вернёт токен, который нужно передать в callback-функцию скрипта для продолжения выполнения

while True:
    solu = requests.get(f"https://2captcha.com/res.php?key={my_key}&action=get&json=1&id={s}").json()
    if solu["request"] == "CAPCHA_NOT_READY":
        print(solu["request"])
        time.sleep(8)
    elif "ERROR" in solu["request"]:
        print(solu["request"])
        driver.close()
        driver.quit()
        exit(0)
    else:
        break

for key, value in solu.items():
    print(key, ": ", value)

solu = solu['request']
driver.execute_script(f" cfCallback('{solu}');")
time.sleep(5)

6. Готово! Turnstile пройден и вы можете работать с сайтом дальше.

Полезные ссылки

Если нужно обойти Cloudflare Turnstile (не Cloudflare Challenge) на любом сайте:

Остались вопросы?

Если после прочтения документации у вас остались вопросы по новому API, будем рады ответить и помочь:

Можно задать вопрос любым способом:

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