Selenium Webdriver是可检测的

时间:2014-07-24 16:13:51

标签: javascript testing selenium webdriver detect

我到处读到网站无法检测到用户正在使用硒网络驱动程序......但为什么?

例如,firefox中的webdriver插件添加了一个&#39; webdriver属性&#39;到了 <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吗?

3 个答案:

答案 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驱动程序,那么相同的代码也无济于事。