options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
这个方法就是检测window.navigator.webdriver的值,正常情况下其值为undefined,自动化控制下为true。注意,正常情况下不是false,在JavaScript中undefined为未定义,即该值不存在,而false表示一布尔值。
execute_cdp_cmd函数来帮忙!cdp即Chrome DevTools Protocal,Chrome开发者工具协议。
通过该函数在文档加载前注入一段js代码以消去webdriver值。
如果execute_cdp_cmd报错,要下载新版本的webdriver