您的位置: 网站首页> 大家问> 当前文章

window.navigator.webdriver无效?enable-automation无效selenium配置还是true

老董2020-11-01197围观,130赞

  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可下载)-获得各种-奇葩报错】python学习会

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    window.navigator.webdriver无效?enable-automation无效selenium配置还是true文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200