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

Posted 态度CoderClub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改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 ,我称之为最骚气,没有之一。





以上是关于如何修改webdriver使其跳过浏览器检测的主要内容,如果未能解决你的问题,请参考以下文章

selenium跳过webdriver检测并爬取淘宝我已购买的宝贝数据

触摸 Sprite,使其跳起来然后再次落下(重复多次点击 spritenode。)

Chrome如何设定webdriver=undefined以避免Selenium检测?

C语言中如何不用strcat函数来连接2个数组

利用selenium进行爬虫时,防止js检测驱动的方法

selenium:如果用户关闭浏览器或webdriver会怎么样?如何检测浏览器是否已关闭?