我到处读到网站无法检测到用户正在使用硒网络驱动程序......但为什么?
例如,firefox中的webdriver插件添加了一个' webdriver属性'到了
<html>
元素。因此<html>...
转到<html webdriver="true">...
我很困惑......为什么无法检测到webdriver?
我写了一些Javascript来获取document.outerHTML ...并且有webdriver属性! =检测到了??
这是我在浏览器中使用Webdriver测试的代码,但没有:
<html>
<head>
<script type="text/javascript">
<!--
function showWindow(){
javascript:(alert(document.documentElement.outerHTML));
}
//-->
</script>
</head>
<body>
<form>
<input type="button" value="Show outerHTML" onclick="showWindow()">
</form>
</body>
</html>
有人可以解释一下为什么无法检测到Webdriver吗?
答案 0 :(得分:3)
W3C draft spec中的Appendix E状态,驱动程序应提供指纹识别WebDriver驱动浏览器的机制。目前,没有任何实现符合规范的这一部分。 Firefox驱动程序目前最接近,为html
标记添加了一个属性。其他浏览器的未来版本和驱动程序可能会实现符合规范的检测方法。
答案 1 :(得分:1)
我不得不支持SiKing,因为你使用的任何插件都不是实际的Selenium工具的一部分。你可以发布你的插件链接吗?也许这会带来更多的亮点。
一般来说,WebDriver只是自动使用浏览器,目的是尽可能地复制人类用户的动作。这本身就不会对服务器不可见。除非您改变浏览器的用户代理,否则服务器无法轻易看到任何类型的自动化正在使用中。
然而,虽然我最近才开始研究这个问题,但是对应用程序的重复自动化使用可能会在服务器日志中呈现模式,这些模式可能比人类用户更加一致,只要与应用程序进行交互即可。例如,如果您使用Selenium刮取网站,由于自动会话的性质,您可能会留下一些指纹。诸如极其一致的点击,输入,页面请求等事情可能会形成明显的日志模式,可能会暴露自动化。
现在,除非您在系统上产生大量流量或大量重复操作,否则您不太可能被注意到。它会在日志中产生相当不正常的事情,或者是一个非常敏锐的系统管理员来触发任何类型的手动调查......即使这样,有人也必须知道要寻找什么才能做出准确的决定。
答案 2 :(得分:1)
是的,selenium是可检测的。检查Can a website detect when you are using selenium with chromedriver? 如果有人使用Firefox驱动程序进行自动化,那么很容易检测到您是否将此代码放在客户端
try{
if(window.document.documentElement.getAttribute("webdriver"))
alert("Caught in 1st case :- Selenium Webdriver is banned!!!");
}
catch(Exception){}
try{
if(navigator.webdriver)
alert("Caught in 2nd case :- Selenium Webdriver is banned!!!");
}
catch(Exception){}`
但如果你使用的是chrome或IE驱动程序,那么相同的代码也无济于事。