【问题标题】:Selenium Webdriver is detectableSelenium Webdriver 是可检测的
【发布时间】:2014-09-16 07:34:39
【问题描述】:

我到处读到,网站不可能检测到用户正在使用 selenium webdriver……但为什么?

例如,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?

【问题讨论】:

  • 你能解释一下你在哪里得到“firefox 中的 webdriver 插件”吗?
  • 它是预装在 FirefoxDriver 中的,但它不是插件。这是一个插件
  • 好的,我不确定你有什么,但我有一个猜测en.wikipedia.org/wiki/WebDriver#Selenium_WebDriver 说:“截至 2012 年初,Simon Stewart ... [正在与 W3C 进行谈判,以使 WebDriver 成为互联网标准。”我不知道你的插件是做什么的,但这不是 Selenium 测试自动化工具。
  • 你的问题是它不是一个跨平台的跨浏览器“检测”WebDriver的解决方案。你是对的,它是在 FFDriver 中设置的,但 only。因此,您的检测方法将在所有其他浏览器上失败。另外值得一提的是,FF Driver 最终将被 Marionette 取代 - 所以这个解决方案甚至可能无法继续工作。但是,很好的发现,它是在初始页面加载时设置的:source
  • 您看到的 Firefox 插件是 FirefoxDriver 的当前实现。驱动程序创建一个匿名配置文件,其中安装了一个提供驱动程序实际实现的 Firefox 扩展。如其他地方所述,驱动程序的未来版本将不再依赖扩展来驱动浏览器,而是使用浏览器本身提供的技术(也称为“木偶”)。

标签: javascript testing selenium webdriver detect


【解决方案1】:

W3C draft specAppendix E 中声明驱动程序应该提供一种机制来识别浏览器正在由 WebDriver 驱动。目前,没有任何实现符合规范的这一部分。 Firefox 驱动程序目前最接近,将属性添加到 html 标记。其他浏览器的未来版本和驱动程序可能会实现符合规范的检测方法。

【讨论】:

    【解决方案2】:

    是的硒是可检测的。检查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 驱动程序,相同的代码将无济于事。

    【讨论】:

      【解决方案3】:

      我不得不支持 SiKing,因为您使用的任何插件都不是实际 Selenium 工具的一部分。您可以发布指向您的插件的链接吗?也许这会带来更多的启示。

      一般而言,WebDriver 只是自动化浏览器的使用,目的是尽可能接近地复制人类用户的操作。这本身对服务器是不可见的。除非您更改浏览器的用户代理,否则服务器将无法轻松看到任何类型的自动化正在使用中。

      但是,虽然我最近才开始研究这一点,但重复自动使用应用程序可能会在服务器日志中显示模式,就与应用程序的交互而言,这些模式可能比人类用户更加一致。例如,如果您使用 Selenium 来抓取网站,您可能会因为自动会话的性质而留下一些指纹。诸如极其一致的点击、输入、页面请求等事情可能会形成明显的日志模式,可能会暴露自动化。

      现在,除非您在系统上产生大量流量或大量重复操作,否则您不太可能被注意到。需要在日志中产生相当异常的东西,或者非常细心的系统管理员才能触发任何类型的手动调查......即使这样,也必须有人知道要寻找什么才能做出准确的决定。

      【讨论】:

      • 谢谢。但是这个插件是预先安装在 FirefoxDriver 中的,所以我不能提供它的链接。我知道不人道的行为会被记录下来,并且会暴露自动化,但这不是我的意思。使用 FFDriver 时,我只是对初始页面加载时的“WebDiver = true”属性感到困惑。 @Arran 的评论带来了一些启示
      • @Stevo 实际上,Firefox 配置文件包含一个插件,它只是 Firefox webdriver 的“javascript 服务器部分”。标签 webdriver=true 可以毫无问题地删除。您可以提取插件并将其上传到其他地方,然后有一个链接显示;-) 但如果只是要求人们寻找来源会更好。
      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2019-10-24
      • 2014-05-14
      • 1970-01-01
      • 2014-08-21
      相关资源
      最近更新 更多