Веб-страница обнаруживает Selenium Webdriver с Chromdriver в качестве бота

Я пытаюсь очистить https://www.controller.com/ с помощью python, и, поскольку на странице обнаружен бот, использующий pandas.get_htmlи запросы с использованием пользовательских агентов и вращающегося прокси, я прибегнул к использованию селена веб-драйвера. Тем не менее, это также обнаруживается как бот со следующим сообщением. Кто-нибудь может объяснить, как я могу пройти через это?

Извините за прерывание... Когда вы просматривали www.controller.com, что-то в вашем браузере заставило нас думать, что вы бот. Это может произойти по нескольким причинам: вы опытный пользователь, перемещающийся по этому сайту со сверхчеловеческой скоростью. Вы отключили JavaScript в своем веб-браузере. Сторонний плагин для браузера, такой как Ghostery или NoScript, запрещает запуск JavaScript. Дополнительная информация доступна в этой статье поддержки. Чтобы запросить разблокировку, пожалуйста, заполните форму ниже, и мы рассмотрим ее как можно скорее "

Вот мой код:

from selenium import webdriver
import requests
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
#options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.controller.com/')
driver.implicitly_wait(30)

3 ответа

Решение

Вы упомянули о pandas.get_html только в вашем вопросе и options.add_argument('headless') только в вашем коде, поэтому не уверен, что вы их реализуете. Однако, взяв минимальный код из вашей попытки кода следующим образом:

  • Блок кода:

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://www.controller.com/')
    print(driver.title)
    

Я столкнулся с той же проблемой.

  • Браузер Снашот:

Когда я проверял HTML DOM, было замечено, что веб-сайт ссылается на til_referrer на window.onbeforeunload следующее:

<script type="text/javascript" id="">
    window.onbeforeunload=function(a){"undefined"!==typeof sessionStorage&&sessionStorage.removeItem("distil_referrer")};
</script>

Снимок:

Это явный признак того, что веб-сайт защищен поставщиком услуг управления ботами Distil Networks, и навигация ChromeDriver обнаруживается и впоследствии блокируется.


Distil

В соответствии со статьей Distil.it...

Distil защищает сайты от автоматических ботов, которые следят за поведением сайтов и выявляют закономерности, свойственные скребкам. Когда Distil идентифицирует вредоносного бота на одном сайте, он создает черный профиль поведения, который развертывается для всех его клиентов. Что-то вроде брандмауэра бота, Distil обнаруживает шаблоны и реагирует.

В дальнейшем,

"One pattern with **Selenium** was automating the theft of Web content" Об этом заявил генеральный директор Distil Рами Эссаид в интервью на прошлой неделе. "Even though they can create new bots, we figured out a way to identify Selenium the a tool they're using, so we're blocking Selenium no matter how many times they iterate on that bot. We're doing that now with Python and a lot of different technologies. Once we see a pattern emerge from one type of bot, then we work to reverse engineer the technology they use and identify it as malicious".


Ссылка

Вы можете найти пару подробных обсуждений в:

Наконец-то решил проблему, и безголовый режим тоже работает.

      chrome_options = Options()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--headless")

driver = webdriver.Chrome("chromedriver.exe", options=chrome_options)

driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

Distil может определить, что у вас нет головы, сняв отпечатки пальцев с помощью холста HTML5. Они также проверяют такие вещи, как плагины браузера и пользовательский агент. Selenium устанавливает некоторые флаги браузера, которые также можно обнаружить.

Другие вопросы по тегам