我正在使用Watir和Nokogiri来解析网页并与之互动。我想确定DOM元素在单击时是否触发脚本。根据我的研究,我了解这可以通过JavaScript和chrome dev工具实现,但我想用Ruby实现这一点。
例如,http://worrydream.com。当我检查显示的图像时,我看到的只是具有一些CSS样式的div,但没有迹象表明它是一个链接,或者当我点击时它会做出反应。然而,当我单击某些元素时,会执行动画(或脚本)。有什么表明单击图像是一个事件?
更新 最初,我正在考虑的是抓取与页面相关联的JavaScript,然后以某种方式确定是否会触发事件,但我会尝试Mark Thomas提出的解决方案,并在我测试后将其答案标记为正确。
答案 0 :(得分:1)
简短的回答?什么都没有。
答案很长:
为了找出触发脚本的元素,您需要知道将每个元素的侦听器附加到哪个Javascript。为了做到这一点,你必须能够执行Javascript。 WATIR和Nokogiri不会自己执行Javascript。 WATIR使用一个将在内部执行JavaScript的浏览器。 Watir-webdriver使用基于Java的浏览器模拟器(Selenium),它也有一个JavaScript执行器,它将执行页面的javascript。 Nokogiri根本不执行JavaScript。
因此,您需要注入一些自己的Javascript来“读取”哪些侦听器附加到特定元素。这并不容易,因为您无法控制JavaScript环境。 但是,,即使你找到了一种方法,但事实证明,W3C DOM接口没有提供标准方法来找出哪些事件监听器附加到特定元素。像JQuery这样的各个JavaScript库会缓存它们的监听器,但每个都以自己的方式执行。
换句话说,这变得非常复杂。
可能的解决方案
以下是所有猜想,但如果你真的想在Ruby领域寻求获取这些信息,那么你可以尝试一下。
首先,您需要一种方法将JS注入您的页面并获得结果。这可能是使用watir-webdriver,因为Selenium有钩子来做到这一点。有关如何注入JS并将结果返回给Selenium中的调用者的说明,请参阅this page的最后一部分。另一个选项是PhantomJS,这是一个带有JS API的无头浏览器。
其次,您需要找到一个JavaScript库,该库可以了解每个流行的JS库如何缓存其侦听器并可以收集信息。为此,您可以尝试Visual Event 2。
你仍然需要连接这些东西,这需要一些JS hackery。祝你好运。