最近使用selenium-java模拟登录某网站,遇到如下问题:
某网站滑块验证
一点不给机会,只要是通过驱动打开的浏览器,即使用手滑动也会验证失败
在网站查找解决方法,得知是使用自动化软件打开浏览器会有特征码,navigator.webdriver的值为true导致的,继续查找解决方案,有使用mitmproxy做代理,拦截用py脚本消除特征码的,因为我不会python,这玩意儿我研究半天搞不懂就放弃了.还有一些其他方法测试没有用的…
正当万念俱灰的时候看到python版的Puppeteer,Pyppeteer框架的如下代码,此代码就是执行js将navigator.webdriver的值改为false :
await page.evaluate(
'''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')```
于是我用java版的Puppeteer测试了一下,打开的网站用手滑动可以通过验证了.
于是在selenium中, driver.get(“xxxx”)后执行如下代码:
((JavascriptExecutor) driver).executeScript("Object.defineProperties(navigator,{ webdriver:{ get: () => false } })");
最终测试通过.