- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Watir 和 Nokogiri 来解析网页并与它们交互。我想确定 DOM 元素在被单击时是否触发脚本。根据我的研究,我知道这可以通过 JavaScript 和 chrome 开发工具实现,但我想使用 Ruby 来实现。
例如,http://worrydream.com .当我检查显示的图像时,我看到的只是带有一些 CSS 样式的 div,但没有迹象表明它是一个链接,或者它会在我单击时使用react。然而,当我单击某些元素时,会执行动画(或脚本)。什么表明点击图片是一个事件?
更新:最初,我考虑做的是抓取与页面关联的 JavaScript,然后以某种方式确定是否会触发事件,但我会尝试 Mark Thomas 提出的解决方案,并在测试后将他的答案标记为正确。
最佳答案
简短的回答?什么都没有。
长答案:
为了找出哪些元素触发了脚本,您需要知道已执行哪些 Javascript 将监听器附加到每个元素。为了做到这一点,你必须能够执行 Javascript。 WATIR 和 Nokogiri 本身不执行 Javascript。 WATIR 使用将在内部执行 JavaScript 的浏览器。 Watir-webdriver 使用基于 Java 的浏览器模拟器 (Selenium),它也有一个 JavaScript 执行器来执行页面的 javascript。 Nokogiri 根本不执行 JavaScript。
因此您需要注入(inject)一些您自己的 Javascript 来“读取”附加到特定元素的监听器。这并不容易,因为您无法控制 JavaScript 环境。 但是,即使您找到了这样做的方法,但事实证明 W3C DOM 接口(interface)没有提供标准方法来找出哪些事件监听器附加到特定元素。独立的 JavaScript 库(如 JQuery)会缓存它们的监听器,但每个库都以自己的方式进行。
换句话说,这变得非常复杂。
可能的解决方案
以下全是推测,但如果您真的想在 Ruby 领域中获取这些信息,那么您可以尝试一下。
首先,您需要一种将 JS 注入(inject)页面并获得结果的方法。这可以使用 watir-webdriver 来实现,因为 Selenium 有钩子(Hook)可以做到这一点。查看 this page 的最后有关如何注入(inject) JS 并将结果返回给 Selenium 中的调用者的说明。另一个选项是 PhantomJS这是一个带有 JS API 的 headless 浏览器。
其次,您需要找到一个 JavaScript 库,它了解每个流行的 JS 库如何缓存它们的监听器并可以收集信息。为此,您可以尝试 Visual Event 2 .
您仍然需要将这些东西连接起来,这需要一些 JS 技巧。祝你好运。
关于javascript - 如何使用 Ruby 查找 DOM 元素是否具有事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16537132/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!