Comments 7
Зачем тут BeautifulSoup? вы как без него искали довольно простые элементы по css селектору, так и после него.
Как будто бы его можно безболезненно выкинуть.
Спасибо за вопрос! Selenium здесь выступает в роли "двигателя" (прокликать фильтры, дождаться загрузки), а BeautifulSoup быстро и точно достать данные. Работать с page_source через BS4 банально быстрее и надежнее, чем дергать find_elements для каждого чиха, нагружая канал между скриптом и драйвером браузера. Передавая page_source в BeautifulSoup, мы фиксируем состояние страницы в конкретный момент. Это позволяет спокойно "разобрать" все данные тарифа, не боясь, что скрипт на странице внезапно обновит DOM и уронит наш цикл
Поделитесь, пожалуйста, опытом обхода cloud flare. Были ли проблемы, как выполняли challenges, если случались?
Использую headless chrome (chromedp библиотека под golang) и часто сталкиваюсь с тем, что cf не пропускает, просит выполнить challenge (видимо, уровень анализа на той стороне выставлен приличный). Так вот, хочу понять, проблема во мне, выбранном стеке или в чем-то еще?
koleso_O, проблема почти наверняка в стеке, не в вас.
headless chrome (и chromedp, и selenium-stealth из статьи) работают поверх stock Chromium. JS-патчи применяются уже после старта движка - между запуском процесса и моментом, когда патч перехватывает управление, есть окно. Cloudflare Bot Management делает fingerprint-замер именно в этом окне: Canvas hash, WebGL RENDERER/VENDOR, navigator.webdriver - всё это успевает “засветиться” до того как ваш патч загрузился.
Автору статьи повезло: Дом.ру, судя по описанию, использует менее агрессивную защиту. CF уровня “challenge при любом headless” - это уже L2-детект, который JS-патчи принципиально не закрывают.
Попробуйте CloakBrowser - Chromium с патчами на уровне C++ до компиляции. Движок просто никогда не отдаёт automation-сигналы, нет окна, нет детекта.
Проблема точно не в вас и не в Go, а в том, что Cloudflare "видит" стандартный headless-режим за версту. При использовании headless: true браузер отправляет специфические сигналы (HTTP-заголовки, отсутствие определенных JS-свойств), которые CF считывает как бота.
В Python есть selenium-stealth (я упоминал её в статье) или undetected-chromedriver. Они патчат свойства браузера на лету, подменяя navigator.webdriver, параметры WebGL и специфические хром-функции, по которым CF вычисляет автоматизацию. Для Go (chromedp) есть аналогичные подходы по инъекции JS-скриптов перед загрузкой страницы.
Попробуйте использовать режим --headless=new (в новых версиях Chrome). Он работает как полноценный браузер, просто без отрисовки окна, и его гораздо сложнее детектировать.
Парсинг тарифов интернета и ТВ. Selenium + BeautifulSoup: трудности динамического контента и защиты от ботов