Парсинг тех, кто этого очень не хочет, или внутренности Cloudflare
Решил на выходных реанимировать один проектик, который потрошит целиком большой сайт с футбольной статистикой. Они поставили Cloudflare в максимально жестком режиме и пройти его — по-настоящему сложный квест. Клаудфлер стронг.
Большую часть защиты на роботность в мире можно обойти заранее прогретой фабрикой браузеров. То есть, когда мы серверно запускаем браузер, ходим в гугл, гуляем из него по сайтам, двигаем по ним мышкой — в общем, создаём "историю", как будто мы человек. Но большая часть защиты построена на принципе "чтоб не мешали": сначала нас чекают мягко и пропускают даже с высоким скором роботности, а затем по мере нарастания подозрения повышают чекалку до максимальной. Прогрев и малый объем парсинга в таких ситуациях отводит большинство подозрений, и всё работает замечательно.
История с просто хождением через прокси, открытием в инкогнито и прочими трюками — работает, но на по-настоящему больших сайтах оно пускает лишь потому, что это разрешили. Если проблема роботов стоит остро, то под каждого юзера собирается сложный слепок его данных (т.н. "ml-фингерпринт"), который в себя включает как настоящие браузерный fingerprint на пару с ссетевым fingerpint, так и большое множество параметров юзера вообще. При желании найти того, кого уже задетектили, но он открыл еще один браузер — не очень сложно.
Клаудфлер особо силен тем, что у него такие фингерпринты сквозные через весь интернет — они делают слепки юзеров со всей своей базы и могут с ней же сверяться.
Это больно! Большинство вариантов обрубает даже до чекбокса (он не показывается, только загрузка). Если пробиться, то просто кликнуть мало — там очень хитрый shadow DOM.
Что пробовал
Перепробовал практически все стандартные подходы, которые обычно используют для обхода антиботов:
— Headless браузеры со stealth-патчами (Playwright + stealth, Camoufox)
— TLS-имперсонация с куками без браузера (curl_cffi)
— Альтернативные библиотеки автоматизации (DrissionPage + Chromium)
— Запуск через виртуальный дисплей (xvfb)
— undetected-chromedriver
— Клики по экрану через xdotool
— Полностью чистый Chrome без CDP/WebDriver вообще
— Попытки исправить WebGL окружение (SwiftShader)
Результат у всех вариантов по сути одинаковый: страница крутит "Just a moment...", либо чекбокс появляется, но не реагирует на клики (точнее клик как js-событие случается, но это не тот клик). Что-то из этого завелось, но на один раз - следующая показ чекбокса через несколько страниц уже снова отсекал такого клиента.
Вывод
Главный урок из всей этой истории — современные антиботы ушли ооочень далеко вперед и это огромная система корреляции сигналов, где одновременно анализируются: сетевой и браузерный fingerprint, tls, gpu/webgl, canvas, ip-репутация (не дай боже вам иметь подсеть IP хетцнера) и многое-многое другое.
Каждый сигнал можно подделать, но когда они начинают их склеивать и играть в вероятности - это становится инженерно очень больно и, честно говоря, никому с таким столкнуться не желаю 🤗😀
Post #73
1.15K
- 👍 9
- ✍ 3
- 😱 2
- 👾 1