一般来讲,使用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')