vlambda博客
学习文章列表

如何修改webdriver使其跳过浏览器检测

 终极逃脱网站 Selenium 验证规则



What is window.navigator.webdriver?


window.navigator.webdriver  是一种检测 WebDriver 的手段,也是大厂们都在使用的一种反爬手段。详细点说,就是在你访问他们的网站时,当他们检测到你的  window.navigator.webdriver   属性值为 true 时,你就会被判定为机器人登录。一般情况下,如果我们使用 Selenium 来模拟我们的操作, window.navigator.webdriver   就会被设置为 true,那么他们就检测出我们是机器人了,那怎么才能跳过去呢?请继续往下看。



I'm not robot!


当我们使用 F12(开发者工具),打开Console选项卡(执行JS代码),我们在Console中输入 window.navigator.webdriver 代码并按下回车键, 这里可以看到当我们正常使用Chrome去访问网页时,属性显示为 undefine 如下图:



  当我们使用如下代码正常访问网站时,再重复上面的步骤,在浏览器中输入 JS 代码时,我们可以发现,这个属性值变成了 True , 如果网站通过js代码获取这个参数,返回值为 undefined说明是正常的浏览器,返回 true说明用的是Selenium模拟浏览器,那么他们可能给我们假数据,或者根本就不给我们访问此网站(404),然后就有人会问了,这里我们应该怎么办呢?别着急继续往下看:

from selenium.webdriver import Chrome
drive = Chrome()


如何修改webdriver使其跳过浏览器检测

如果是做反爬网站的就可以这样去检测我们:


selenium = window.navigator.webdriver;if(selenium){ console.log('你是机器人我要给你假数据了!')} else { console.log('你没问题尽情的访问我们的网站吧!')}


那我们就没有办法了吗?当然有办法,而且很简单,办法也有很多,请诸位尽情的享用。


第一种(稳重)


在用 webdriver 启动浏览器之前将我们 webdriver 中的 excludeSwitches 功能配置为 ['enable-automation']  即可,代码如下:

option = ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])driver = Chrome(options=option)

当我们打开浏览器时会提示请停用开发者模式运行的扩展程序,手残党请勿停用,不然我们做的一切都相当于泡沫。这里我们按照上面的步骤打开 Console 对话框,输入我们的 JS 代码,发现这个属性变成了 undefined , 是的我们成功了,是不是很简单。


第二种(调皮)

懂 JS 的小伙伴们都应该知道我们可以在浏览器中使用一行代码修改 window.navigator.webdriver 的值,不懂的朋友们也不用去深究这个问题,因为使用这种方式也是有限制的,这种方式只能修改我们当前的页面中 window.navigator.webdriver 的属性值,而当我们打开新的页面时,我们会发现属性值又变成了 true,所以这种方式我并不推荐,但是又觉得了解总比不知道的好,所以下面我给贴上修改的代码,只需要将如下代码输入到 Console 中,即可将 t true 修改为 undefined,细心的小伙伴们可以自己去试试哦!

Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});

第三种(究极方案之终极逃脱蛇皮怪)

修改 chromdriver 源码,究竟如何修改?下面我来教你!



首先使用你的编辑器打开 Chromedriver 程序,windows 的同学可以使用 Notepad++ 程序,打开 chromedriver.exe,搜索字符找到 const Promise = window.cdc_asdjflasutopfhvcZLmcfl_  , 然后将 asdjflasutopfhvcZLmcfl 中的 a 修改成 非 a 的任意字符,保存替换我们原来的 chromedriver 即可,然后我们打开 Console 对话框,查看我们的 window.navigator.webdriver 属性值还是 undefine ,我称之为最骚气,没有之一。