一般来讲,使用selenium访问某个网址(浏览器以Chrome为例),都会有Chrome正受到自动测试软件的控制
的提示
- 以百度为例:
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://baidu.com')
有些网站会通过检测进行屏蔽,拒绝访问。
检测的基本原理:
检测当前浏览器窗口下的window.navigator
对象是否包含webdriver
这个属性。因为在正常使用浏览器的情况下,这个属性是undefined
的,然而,一旦我们使用了selenium
,selenium
会给Window.navigator
设置webdriver
属性,很多网站就通过JavaScript判断,如果webdriver
存在就直接屏蔽。
解决方法:
可以使用CDP来解决这个问题,通过CDP,我们可以实现在每个页面刚加载时执行JavaScript代码。
CDP:Chrome Devtools-Protocol,Chrome开发工具协议
- 示例代码如下(仍以百度为例):
from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=option)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': 'Object.defineProperty(navigator, "webdriver", {get:()=>undefined})'
})
driver.get('https://baidu.com')