正常网页用代码window.navigator.webdriver在console检测会返回false或undefined,但是在selenium中在selenium中会出现True
解决办法分成两种,一种是老版本的chrom使用的方法,一种是新版本的chrom使用的方法
老版本方法
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path='./chromedriver')
driver.get("https://taobao.com")
driver.close()
新版本方法
from selenium import webdriver
driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
driver.get('http://exercise.kingname.info')
driver.close()
因为有时候自己写的是新版本,服务器使用的是老版本chrom,所以我们可以合并在一起使用
from selenium import webdriver
# 为了防止你不确定自己的 chrom 版本,最好两个混合用
options = webdriver.ChromeOptions()
# chrom在79版之前用这个
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 这个是更改 user-agent 的,可有可无
options.add_argument(
"user-agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)")
driver = webdriver.Chrome(options=options)
# chrom在79版之后用这个
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
driver.get('https://baidu.com')
time.sleep(30)
# 这里最好用代码关闭selenium不然的话你的进程里会残留大量的chrom进程
driver.close()
网友评论