您的位置: 网站首页> 大家问> 当前文章
window.navigator.webdriver无效?enable-automation无效selenium配置还是true
老董2020-11-01198围观,112赞
selenium做爬虫能解决很多反爬问题,但是selenium也有很多特征可以被识别,比如用selenium驱动浏览器后window.navigator.webdriver值是true,而正常运行浏览器该值是未定义的(undefined),如下:
网上的各种文章往往告诉大家把selenium做一下启动配置即可,如下:
option.add_experimental_option("excludeSwitches", ['enable-automation'])
但是实际操作后发现并没有卵用,不管怎么配置window.navigator.webdriver的值还是true,原因安在?
1 因为网上的文章大都是复制粘贴,一个错全都错。
2 网上的文章太老了,即使今天是对的,随着时间推移版本更替也可能变成错的。
3 因为ChromeDriver 79.0.3945.36版本无法通过更改enable-automation设置解决window.navigator.webdriver==true的问题。谷歌浏览器修复了非无头模式下排除“启用自动化”时window.navigator.webdriver是未定义的问题。
要想正常使用,得把把Chrome回滚一个版本,并找到对应的ChromeDriver版本。这样才可以!此外,你还可以采用mitmproxy中间人的方式或者Pyppeteer模块来解决这问题,但是之前没接触过的话时间成本有点高!
当然,大家可以参考CDP文档,使用driver.execute_cdp_cmd在Selenium 中调用CDP的命令,新版本谷歌在打开网页之前添加如下代码。下述只需要执行一次,之后只要不关闭这个driver开启的窗口,无论打开多少个网址,他都会自动提前在网站自带的所有 js 之前执行这个语句,从而可以隐藏window.navigator.webdriver。
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ })
为了更好的隐藏,可以再增加2个实验选项
options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path='./chromedriver') driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ })
另外,最近发现如下配置也可以去除webdriver特征。
# 屏蔽webdriver特征 option.add_argument("--disable-blink-features") option.add_argument("--disable-blink-features=AutomationControlled")
一言以蔽之,window.navigator.webdriver无效的问题是因为浏览器版本不同所以配置没起作用。 【欢迎大家加群(有旧版本谷歌浏览器及对应的webdriver可下载)-获得各种-奇葩报错】
本文就此结束,感谢IT人士的关注window.navigator.webdriver无效?enable-automation无效selenium配置还是true,本文合作企业直达:更多推荐。
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
文章评论
-
window.navigator.webdriver无效?enable-automation无效selenium配置还是true文章写得不错,值得赞赏