Тема 7: Спецназ: DrissionPage и curl_cffi. Что это за звери и когда их применять?
Ты изучил httpx (пехота) и Playwright (танки). Но бывает так:
- Ты шлешь запрос через
httpx— получаешь 403 Forbidden. - Ты открываешь браузер через
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) | 🐢 Медленно | Средне |
🧠 Вывод Архитектора:
- Твой первый шаг: Всегда пробуй
httpx. - Если 403: Не спеши запускать браузер. Попробуй
curl_cffi. Если сработает — ты сэкономил кучу ресурсов. - Если нужен JS и защита лютая: Playwright с плагином
playwright-stealth— это стандарт. - Если Playwright не справляется (капчи, вечные проверки): Доставай
DrissionPage. Сейчас (в 2024-2026) это "мета" для пробива сложных защит. Но помни: это тяжелая артиллерия.
Блок 2 (Арсенал) закрыт.
У тебя есть полный набор инструментов: от перочинного ножика (httpx) до гранатомета (DrissionPage).