Обход Cloudflare на DexScreener: Скрипт на Python и Selenium

Обход Cloudflare на DexScreener: Скрипт на Python и Selenium Python & API
Пошаговое руководство для Quant Developer: обход защиты Cloudflare на DexScreener с помощью Python, Selenium и Undetected Chromedriver для парсинга DEX.
Суть: Для обхода защиты Cloudflare (Turnstile/JS Challenge) при парсинге DexScreener используется библиотека undetected-chromedriver, которая модифицирует бинарный файл ChromeDriver на лету, удаляя маркеры автоматизации, что позволяет успешно собирать данные о пулах ликвидности в реальном времени.

В сфере алгоритмической торговли на децентрализованных биржах (DEX) скорость и полнота данных определяют математическое ожидание вашей стратегии. В то время как централизованные площадки предоставляют стандартизированные API, агрегаторы ликвидности вроде DexScreener защищают свои веб-ресурсы с помощью Cloudflare. Попытки использовать стандартные библиотеки вроде requests или классический Selenium мгновенно приводят к получению HTTP-кода 403 или бесконечному циклу решения капчи.

Для квантов, которые уже настроили сбор рыночных данных с CEX — например, используя наше руководство Парсинг Open Interest фьючерсов Binance на Python: Гайд для Квантов — интеграция ончейн-метрик с DEX является логичным следующим шагом для поиска арбитражных возможностей.

Исходный код

Ниже представлен готовый к продакшену скрипт, который инициализирует оптимизированный экземпляр undetected-chromedriver, обходит валидацию Cloudflare на DexScreener и извлекает цену токена.

import time
import random
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def init_driver():
    options = uc.ChromeOptions()
    
    # Cloudflare легко детектирует стандартный headless-режим.
    # Для работы на сервере без GUI используйте виртуальный фреймбуфер (Xvfb).
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    
    # Ротация User-Agent для минимизации фингерпринтинга
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
    options.add_argument(f'--user-agent={user_agent}')
    
    # Инициализируем undetected_chromedriver
    driver = uc.Chrome(options=options, version_main=122)
    return driver

def scrape_dexscreener_price(pair_address):
    driver = init_driver()
    try: 
        # Переходим на страницу целевой пары на DexScreener
        url = f'https://dexscreener.com/ethereum/{pair_address}'
        driver.get(url)
        
        # Имитируем естественную задержку для прохождения JS-челленджа Cloudflare
        time.sleep(random.uniform(7.0, 10.0))
        
        # Ожидаем появления элемента с ценой токена в DOM
        wait = WebDriverWait(driver, 15)
        price_element = wait.until(
            EC.presence_of_element_located((By.XPATH, "//span[contains(@class, 'price')]"))
        )
        
        price_text = price_element.text
        print(f'[SUCCESS] Данные успешно получены. Цена пары {pair_address}: {price_text}')
        return price_text
        
    except Exception as e:
        print(f'[ERROR] Ошибка при обходе Cloudflare: {str(e)}')
        return None
    finally:
        driver.quit()

if __name__ == "__main__":
    # Пример: пара WETH/USDC на Uniswap V3
    target_pair = '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640'
    scrape_dexscreener_price(target_pair)

Разбор параметров

  • uc.ChromeOptions(): Специализированный класс настроек, который предотвращает передачу флага navigator.webdriver в браузер, что является главным триггером для систем защиты.
  • version_main: Параметр в конструкторе uc.Chrome. Крайне важно указывать мажорную версию установленного в вашей системе браузера Chrome во избежание конфликтов драйвера.
  • random.uniform(7.0, 10.0): Введение рандомизированных задержек имитирует поведение реального пользователя и дает Cloudflare время на выполнение фоновых проверок без генерации интерактивной капчи.

Если ваша стратегия завязана на арбитраже между DEX и деривативными рынками, то параллельно с парсингом DexScreener вам потребуется эффективное хранилище для ставок финансирования. О том, как это реализовать, читайте в статье Парсинг Funding Rate Bybit V5 в ClickHouse на Python: Руководство для Quant Developer.

Как запустить

Для успешного запуска скрипта выполните следующие шаги в вашем терминале:

1. Установите необходимые зависимости:

pip install undetected-chromedriver selenium

2. Убедитесь, что у вас установлен официальный браузер Google Chrome. Библиотека undetected-chromedriver автоматически найдет бинарный файл браузера в системе.

3. Запустите скрипт. При первом запуске библиотека может скачать нужную версию ChromeDriver, после чего откроется окно браузера, пройдет проверку Cloudflare и выведет цену в консоль.

Помните, что высокочастотный парсинг DEX-пулов сопряжен с высокими рисками проскальзывания и изменения ликвидности. Для защиты капитала при торговле волатильными активами рекомендуется внедрять динамическое управление позицией. Подробнее этот подход разобран в нашем материале Динамическое кредитное плечо по VIX на Python: Гайд для Квантов.

Оцените статью
FinFluct