Очень хороший разбор того, как в принципе работает защита Cloudflare, обзор вариантов обхода блокировки и решение при помощи расширения браузера был представлен год назад (от написания этой статьи) и на Хабре (кстати, коллега тоже описывал решение на .NET). Решение мне понравилось, но показалось весьма ёмким для реализации. Есть ещё всякие платные сервисы вроде ZenRows и проч., но в моём случае речь не идёт о заработке с парсинга, поэтому траты не имеют смысла.

  1. Чуть лучше обстоят дела с правильными cookie в web request’е, но где ж их взять, если хочешь строить browser-less решение, а одними лишь web request’ами сыт не будешь правильные cookie не получишь никогда.
  2. Можно обернуть свой ChromeDriver в stealth, и никакой Cloudflare об этом не узнает!
  3. Нюанс в том, что доступ к нему нужно запрашивать на сайте для партнеров OZON, оставляешь заявку, и её должны обработать в течение 5 рабочих дней.
  4. Сразу оговорюсь, что описанное ниже носит исключительно информационно-образовательный характер, и не имеет целью нанесение какого-либо ущерба компаниям, использующим защиту из заголовка статьи.
  5. Известно, что API платное, и ценовых политик в публичном доступе нигде нет.

Ещё сразу отмечу, что в скрапинге я являюсь человеком случайным, и возможно часть поданной информации будет являться «жутким баяном» для тех, кто давно пребывает «в теме», но, надеюсь, каждый читатель найдёт здесь хотя бы часть новой/полезной информации. Конечно, данный способ не подразумевает какой-то серьёзной автоматизации через Selenium (щёлкания на элементы и т д), он имеет свои ограничения, но позволяет, тем не менее, не наступать на ловушки против Selenium’а, является достаточно простым и подойдёт для базового скрапинга. Для простоты я поставил на этот случай обычный Delay, но можно использовать более изощренные и надежные варианты.

Об одном способе веб-скрапинга сайтов, защищенных Cloudflare

Все стандартные header’ы вроде User-Agent и иже с ними с установленными «социально-ожидаемыми» значениями никак не помогут обойти блокировки Cloudflare. Чуть лучше обстоят дела с правильными cookie в web request’е, но где ж их взять, если хочешь строить browser-less решение, а одними лишь web request’ами сыт не будешь правильные cookie не получишь никогда. Да, в период массового импортозамещения компании из России приходится пользоваться надежным американским сервисом Cloudflare, по-видимому, отечественные аналоги ещё не подоспели или не обладают сравнимым функционалом. » — спросит некоторый читатель, и будет частично прав, ведь, не так давно от момента написания этой статьи они выпустили прекрасный Statistics API. Нюанс в том, что доступ к нему нужно запрашивать на сайте для партнеров OZON, оставляешь заявку, и её должны обработать в течение 5 рабочих дней. Я попробовал отправить заявку, но по факту её так никто и не обработал ни за 5, ни за большее количество дней, возможно, потому что партнером OZON я не являюсь.

Об одном способе веб-скрапинга сайтов, защищенных Cloudflare

Можно обернуть свой ChromeDriver в stealth, и никакой Cloudflare об этом не узнает! В данном случае, портов под .NET я не нашёл, но, возможно, это и к лучшему. Итак, сначала я вообще глубоко не прошаривался в защищенности платформы какими-либо сервисами, и наивно пробовал отправлять на OZON обыкновенные web request’ы одним из нескольких доступных вариантов в .NET’е.

Об одном способе веб-скрапинга сайтов, защищенных Cloudflare

Чтобы обходить все возможные и невозможные web driver detections, народные умельцы создали решение под названием Undetected ChromeDriver (здесь ссылка для экосистемы Python). Решение повторяет все возможности обычного Chrome Driver’а, при этом при помощи патчинга библиотек, различных hook’ов на некоторые события, установки определенных опций при старте восходящий клин браузера и т д пытается замести все следы, которые оставляет после себя обычный Chrome Driver. Как оказалось, дело здесь даже не в .NET, не в порте библиотеки под .NET, и не в том, что какой-то service не смог стартануть на localhost. Cloudflare научился обнаруживать даже UndetectedChromeDriver, и теперь есть новое решение – stealth-обёртка.

Об одном способе веб-скрапинга сайтов, защищенных Cloudflare

В общем, было принято решение таки запускать браузер как необходимое зло, чтобы добраться до заветного html в response’е. И на эту тему Интернет завален решениями на основе Selenium. К сожалению, Selenium web driver является достаточно «грязным» решением, он оставляет целый набор «следов» при запуске браузера, например, устанавливает некоторые свойства в объекте window.cdc, прописывается в window.navigator.userAgent и ещё целый набор прочих «прелестей». Всё это уверенно и радостно любит отслеживать anti-bot решение от Cloudflare, поэтому отфутболит такой automation-controlled браузер либо сразу же, либо – в лучшем случае – предложит captcha, и не факт, что даже правильное решение этой captcha пропустит вас далее. По сути, предложение решить captcha – уже плохой знак, и чаще всего серьезный блокер для продвижения далее, поэтому даже подходы, направленные на решение captcha, в большинстве случаев являются тупиковыми ????????‍♂️ (по крайней мере, в случае с защитой от Cloudflare это, как правило, так и оказывается). Если проблема решается так со скрипом, то может не смотреть в сторону Selenium?

Об одном способе веб-скрапинга сайтов, защищенных Cloudflare

Известно, что API платное, и ценовых политик в публичном доступе нигде нет. Сразу оговорюсь, что описанное ниже носит исключительно информационно-образовательный характер, и не имеет целью нанесение какого-либо ущерба компаниям, использующим защиту из заголовка статьи. По https://forexww.org/ этим же причинам фокусировка статьи именно на том, как получить заветный html «как из браузера» в автоматизированном режиме, и здесь не будет идти речь о каких-то массовых распараллеливаниях через proxy и VPN, подкладываниях отпечатков (“finger prints”) браузеров и т д.