【selenium】反屏蔽方法


一般来讲,使用selenium访问某个网址(浏览器以Chrome为例),都会有Chrome正受到自动测试软件的控制的提示

  • 以百度为例
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('https://baidu.com')


有些网站会通过检测进行屏蔽,拒绝访问。

检测的基本原理:

检测当前浏览器窗口下的window.navigator对象是否包含webdriver这个属性。因为在正常使用浏览器的情况下,这个属性是undefined的,然而,一旦我们使用了seleniumselenium会给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')


Author: Polaris119
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Polaris119 !
评论
  TOC