使用selenium的时候,会有很多网站对selenium进行检测,做一些反扒措施。

多数情况会检测当前浏览器窗口下window.navigator中是否包含webdriver属性,因为在正常浏览器中,这个属性是undefined


针对这种情况,我们直接将webdriver置空就可以了。

但是如果直接使用execute_script执行js代码置空这条属性,会在页面加载完之后才生效,这时候网站已经检测到这条属性了,所以我们可以用CDP(即Chrome Devtools Protocol,Chrome开发工具协议)解决这个问题,利用它可以再页面刚加载的时候就执行js语句。


代码如下:

from selenium import webdriver
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome(options=option)
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
})
browser.get('https://antispider1.scrape.center/')