selenium 参数设置-window.navigator.webdriver

selenium 参数设置

selenium启动chrome基本上与真实环境类似,但有一些变量还是不一样,需要注意。

有些网站通过这些参数识别爬虫。

 

window.navigator.webdriver

值为undefined是正常的浏览器,返回true说明用的是Selenium模拟浏览器。

这里给出一个检测Selenium的js代码例子

webdriver = window.navigator.webdriver;

if(webdriver){    console.log('Selenium模拟浏览器')

} else {    console.log('正常浏览器')}

 

解决办法:

第一种:使用mitmproxy用中间人的方式截取服务器发送来的js,修改js里面函数的参值方式发送给服务器。相当于在browser和server之间做一层中介的拦截。不过此方法要对js非常熟悉。

 

第二种:通过selenium,设置Chromedriver的启动参数。

 

在启动Chromedriver之前,为Chrome开启实验性功能参数excludeSwitches,它的值为['enable-automation'],完整代码如下:

 

from selenium.webdriver import Chrome

from selenium.webdriver import ChromeOptions

 

option = ChromeOptions()

option.add_experimental_option('excludeSwitches', ['enable-automation'])

driver = Chrome(options=option)

 

此时启动的Chrome窗口,在右上角会弹出一个提示,不用管它,不要点击停用按钮。

再次查询window.navigator.webdriver,可以发现这个值已经自动变成undefined。并且无论打开新网页,开启新窗口还是点击链接进入其他页面,都不会让它变成true。

 

转载于:https://www.cnblogs.com/wodeboke-y/p/11215408.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
window.navigator.webdriver属性是一个布尔值,用于指示当前浏览器是否正在由自动化测试工具控制。该属性在JavaScript中是只读的,它的默认值为false。然而,为了防止被自动化测试工具检测到,有时候需要将其置为空,以隐藏测试工具的存在。在Selenium中,有几种方法可以将window.navigator.webdriver属性置空。 方法1:在每次打开新页面时将window.navigator.webdriver属性置为undefined。 ```python from selenium import webdriver from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_argument('--disable-blink-features=AutomationControlled') option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=option, executable_path="chromedriver.exe") driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { "source": 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})' }) ``` 方法2:在请求时添加参数设置,将window.navigator.webdriver属性置为空。 ```python from selenium import webdriver option = ChromeOptions() option.add_argument('--disable-blink-features=AutomationControlled') driver = webdriver.Chrome(options=option, executable_path="chromedriver.exe") driver.get("xxxxxx") ``` 请注意,以上方法只是在使用Selenium进行自动化测试时隐藏webdriver属性的一种方式,并不能完全防止被检测到。在一些特定的场景下,网站可能会使用其他方式来检测自动化测试工具的存在。因此,如果需要更好地规避检测,请参考其他相关技术和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值