Загрузка...

[Selenium] как обойти защиту от ботов?

Тема в разделе C# создана пользователем howdy_05 13 сен 2021. (поднята 30 сен 2021) 5076 просмотров

  1. howdy_05
    howdy_05 Автор темы 13 сен 2021 Заблокирован(а) 71 18 май 2020
    Из-за распространения ботов использующих selenium, разработчики сайтов начали придумывать способы обнаружения ботов.
    Так как же обойти эти скрипты?
    Всё просто, но давай по порядку:

    Внимание, для примера я буду использовать ChromeDriver версии 93.0.4577.1500
    ссылка на nuget: https://www.nuget.org/packages/Selenium.WebDriver.ChromeDriver/93.0.4577.1500/

    Все действия ниже необходимо совершить ДО перехода на сайт / отправки запроса.

    Изменение user-agent:

    u
    ser-agent - идентификационная строка клиентского приложения или же просто имя браузера.
    Обычно никто его не проверяет, но для правдоподобности стоит его изменить.
    Для этого инициализируем экземпляр класса ChromeOptions.

    ChromeOptions options = new ChromeOptions();


    Затем методом AddArgument() добавляем наш параметр.

    options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0");


    Под спойлером представлены различные значения --user-agent, которые можно вписать вместо

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0


    MacOs:
    • Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
    • Mozilla/5.0 (Macintosh; Intel Mac OS X 11.5; rv:90.0) Gecko/20100101 Firefox/90.0
    • Mozilla/5.0 (Macintosh; Intel Mac OS X 11.5; rv:78.0) Gecko/20100101 Firefox/78.0
    • Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15
    • Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Vivaldi/4.1
    Windows:
    • Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
    • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
    • Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
    • Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
    • Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
    Linux:
    • Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
    • Mozilla/5.0 (X11; Linux i686; rv:90.0) Gecko/20100101 Firefox/90.0
    • Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:90.0) Gecko/20100101 Firefox/90.0
    • Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0
    • Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0
    все user-agent представленные выше актуальны на момент написания статьи.

    Так же не забываем добавить переменную options при создании драйвера

    ChromeDriver driver = new ChromeDriver(options);


    Отключение расширений selenium:

    Некоторые сайты шагнули вперёд и определяют ботов по наличию некоторых расширений. Отключаются расширения при помощи пары методов ниже.

    options.AddArgument("--disable-blink-features=AutomationControlled");
    options.AddExcludedArgument("enable-automation");
    options.AddAdditionalCapability("useAutomationExtension", false);


    Так-же эти аргументы убирают надпись сообщающую о том, что "Браузером Chrome управляет автоматизированное тестовое ПО"

    Установка значения параметра webdriver:

    В большинстве случаев именно по этому параметру сайты и определяют бота.
    Создаем экземпляр класса IJavaScriptExecutor

    IJavaScriptExecutor js = (IJavaScriptExecutor)driver;


    Далее выполняем javascript скрипт, который в свою очередь изменит параметр webdriver на "undefined"

    js.ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");


    На этом всё. если что-то из этого не сработало / выдало ошибку, то пишите под этим постом. Всем удачи!
     
    13 сен 2021 Изменено
  2. getrighton
    getrighton 13 сен 2021 426 14 дек 2018
    [IMG] Если использовать вместо хрома firefox, не придется ебаться с js. У fox намного больше настроек, которые ты можешь вписать в options.addargument.
    Что бы отрубить флажок webdriver на python: optiom.set_preference('dom.webdriver.enabled', False)
     
    1. howdy_05 Автор темы
      getrighton,
      js.ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
      необходимо что-бы в nabigator'е браузера не было поля 'webdriver'. На firefox нельзя отключить его через аргументы.
  3. Yotic
    Yotic 13 сен 2021 Ебашу на C# всё что захотите(Разноцветное) 43 13 янв 2021
    Была такая же проблема при заходе в tiktok, забил огромный болт на это. Использовал Chrome
     
  4. PutinSoft
    PutinSoft 30 сен 2021 Заблокирован(а) 35 28 сен 2021
    Работал с селеном очень давно, и у меня была задача обойти CloudFlare, так вот, я даю вам гарантию что половина сайтов смотрит в основном на заголовки (Accept,Accept-Encoding,Accept-Language и тд). Попробуйте запустить селен в режиме headless, а потом в not-headless и сравните заголовки. Так что не забывайте про смену заголовков браузера, а лучше используйте Puppeteer (там можно ловить запросы браузера в виде события, и редактировать запрос как тебе вздумается)
     
    1. howdy_05 Автор темы
      PutinSoft, большое спасибо за совет, puppeteer только начинаю изучать и уже вижу намного больший потенциал чем в селене)
    2. PutinSoft
      howdy_05, Не за что пупс, если что - обращайся
  5. c0d
    c0d 30 сен 2021 Смотрит тему Как увеличить член, Только что 103 4 янв 2019
    Было такое. юзал хром.
     
Загрузка...
Top