如何修改webdriver使其跳过浏览器检测
“ 终极逃脱网站 Selenium 验证规则”
What is window.navigator.webdriver?
I'm not robot!
undefined
说明是正常的浏览器,返回 true
说明用的是Selenium模拟浏览器,那么他们可能给我们假数据,或者根本就不给我们访问此网站(404),然后就有人会问了,这里我们应该怎么办呢?别着急继续往下看:
from selenium.webdriver import Chrome
drive = Chrome()
如果是做反爬网站的就可以这样去检测我们:
selenium = window.navigator.webdriver;
if(selenium){
console.log('你是机器人我要给你假数据了!')
} else {
console.log('你没问题尽情的访问我们的网站吧!')
}
那我们就没有办法了吗?当然有办法,而且很简单,办法也有很多,请诸位尽情的享用。
第一种(稳重)
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)
懂 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 ,我称之为最骚气,没有之一。