Веб-страница обнаруживает 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 устанавливает некоторые флаги браузера, которые также можно обнаружить.