以下方法在某些时候可以抹除写一些 selenium 的自动化特征,使 window.navigator.webdriver
属性重新定义为 undefined
而不是 true
。以下方法适用于较新版本的 chromedriver
。
本人亲测有效,特征头边变成了undefined 成功获取到了cookie,开心心
chrome_options = Options()
chrome_options.add_argument('--headless') #无头模式,适用于Linux系统
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
#以下两行为实验性选项用于抹除特征
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome(options=chrome_options)
#重新定义window.navigator.webdriver属性
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})