【发布时间】:2020-02-18 07:04:07
【问题描述】:
我正在使用基于 Webdriver 的爬虫从中国新闻网站 (Toutiao) 收集信息。自 2020 年以来美联储。 16、我发现网站没有响应webdriver程序控制的chrome的任何数据,但是chrome手动启动正常(如下图所示)。
左边是手动启动的chrome,右边是webdriver控制的chrome。
两个 chrome 使用同一个 IP,我为这两个 chrome 定义了相同的用户代理。此外,我使用以下代码(来自DebanjanB)删除“navigator.webdriver”(如上图所示,代码成功):
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'./chromedriver')
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
总结,同一个IP,User-agent,和“navigator.webdriver”都去掉了。为什么网站仍然检测到我的 chrome 是由 webdriver 控制的?
更新中
网站通过访问 url 获取内容。如果我从手动启动 chrome 复制并访问 url(带有加密参数)到 webdriver 控制的 chrome,服务器将向 webdriver 发送正确的信息。
因此,网站在生成 url 及其加密参数时肯定会检测到 webdriver。
更新 2
讨论“Can a website detect when you are using selenium with chromedriver?”并没有解决问题,请注意!
【问题讨论】:
-
我使用的是 Chrome 80 和相应的 webdriver。我已阅读该线程,除了重新编译 webdriver 以更改参数名称('cdc'?)之外,我已经尝试了所有方法。我认为该方法基于旧版本的 chrome。
-
除了“navigator.webdriver”,我发现这两个chrome的“navigator.plugins”的值是一样的
-
在 Ubuntu、Win 10 和 Mac 中使用不同版本的 chrome 和 chromedriver 重复出现该问题
-
不幸的是,WebDriver 控制的浏览器和普通浏览器在一些可能可以检测到的方面确实存在差异。 Selenium/WebDriver 对制造 100% 不可检测的机器人不感兴趣,因为这不是它们存在的原因。我过去使用的一种方法是通过远程调试为浏览器的开发人员工具(调试器)编写脚本。这是无法检测到的,但它不如 Selenium。
-
谢谢。我只想知道该站点如何检测 webdriver?或者Puppeteer或者cdp4j等其他工具可以用同样的方法检测吗?
标签: java python google-chrome selenium-webdriver