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: Гайд для Квантов.




