Перейти к содержанию

Тема 7: Спецназ: DrissionPage и curl_cffi. Что это за звери и когда их применять?

Ты изучил httpx (пехота) и Playwright (танки). Но бывает так:

  1. Ты шлешь запрос через httpx — получаешь 403 Forbidden.
  2. Ты открываешь браузер через Playwright — тебя встречает Captcha или белый экран с надписью "Checking your browser...".

Это значит, что противник использует WAF (Web Application Firewall) типа Cloudflare, Akamai или Datadome. Они палят тебя не по IP, а по "отпечаткам".

Тут выходит спецназ.


1. curl_cffi — "Ниндзя-хамелеон"

Проблема: Когда Python (requests/httpx) стучится на сервер, он использует стандартную библиотеку SSL. У неё есть свой уникальный "почерк" (TLS Fingerprint или JA3). Сервер видит этот почерк и говорит: "Ага, это скрипт на Питоне, а не Chrome. Бан."

Решение: curl_cffi — это библиотека, которая подменяет этот почерк. Она на низком уровне (C-binding) имитирует TLS-рукопожатие реального браузера (Chrome, Firefox, Safari).

  • Тип: HTTP-клиент (без браузера).
  • Когда применять:
    • Сайт открывается в браузере, но в Python дает 403.
    • Нужна скорость (без рендеринга JS), но обычные либы не пускают.
  • Как использовать: Она почти полностью копирует синтаксис requests.
from curl_cffi import requests

# impersonate="chrome110" — это магия.
# Мы говорим: "Веди себя как Chrome версии 110".
response = requests.get(
    "<https://tls.browserleaks.com/json>",
    impersonate="chrome110"
)

print(response.json())
# Сервер увидит, что к нему пришел РЕАЛЬНЫЙ Chrome, а не python-скрипт.
  • Бонус: У неё есть AsyncSession для асинхронности.

2. DrissionPage — "Кибер-наемник"

Проблема: Selenium и Playwright оставляют следы "автоматизации". У них есть флаги типа navigator.webdriver = true. Сайты видят эти флаги и кидают капчу. Playwright пытается это скрыть (Stealth-плагины), но гонка вооружений не прекращается.

Решение: DrissionPage — это китайская разработка (поэтому документация местами... специфическая, но код мощный). Она управляет браузером напрямую через CDP (Chrome DevTools Protocol), не используя Webdriver. Это делает её гораздо менее заметной для анти-бот систем.

  • Киллер-фича: Умеет на лету переключаться между режимом Browser (рендеринг) и режимом Requests (быстрые запросы).
  • Когда применять:
    • Cloudflare Turnstile (галочка "Я не робот") не проходится через Playwright.
    • Нужно кликать, но Selenium палится.
  • Синтаксис: Очень лаконичный, в отличие от Selenium.
from DrissionPage import ChromiumPage

# Запускаем браузер
page = ChromiumPage()

# Идем на сайт с защитой
page.get('<https://nowsecure.nl>')

# Проверка Cloudflare часто проходит сама,
# потому что DrissionPage управляет мышью на уровне системы,
# а не через JS-инъекции.

# Парсинг (синтаксис похож на смесь BS4 и Selenium)
ele = page.ele('.callout')
print(ele.text)

page.quit()

⚔️ СРАВНЕНИЕ СПЕЦСРЕДСТВ

Инструмент Суть Против кого работает Скорость Сложность
httpx/requests Честный клиент Против слабых сайтов ⚡ Молния Легко
curl_cffi Подделка TLS Против Cloudflare (на уровне запросов) ⚡ Молния Легко
Playwright Честный браузер Против SPA / JS-сайтов 🐢 Медленно Средне
DrissionPage Стелс-браузер Против Cloudflare (JS + Captcha) 🐢 Медленно Средне

🧠 Вывод Архитектора:

  1. Твой первый шаг: Всегда пробуй httpx.
  2. Если 403: Не спеши запускать браузер. Попробуй curl_cffi. Если сработает — ты сэкономил кучу ресурсов.
  3. Если нужен JS и защита лютая: Playwright с плагином playwright-stealth — это стандарт.
  4. Если Playwright не справляется (капчи, вечные проверки): Доставай DrissionPage. Сейчас (в 2024-2026) это "мета" для пробива сложных защит. Но помни: это тяжелая артиллерия.

Блок 2 (Арсенал) закрыт. У тебя есть полный набор инструментов: от перочинного ножика (httpx) до гранатомета (DrissionPage).