簡體   English   中英

如何查找DOM元素是否具有Ruby的事件偵聽器

[英]How to find if a DOM element has an event listener with Ruby

我正在使用Watir和Nokogiri來解析網頁並與它們進行交互。 我想確定DOM元素在單擊時是否觸發腳本。 根據我的研究,我了解這可以通過JavaScript和chrome dev工具實現,但我想用Ruby實現這一點。

例如, http://worrydream.com 當我檢查顯示的圖像時,我看到的只是具有一些CSS樣式的div,但沒有跡象表明它是一個鏈接,或者當我點擊時它會做出反應。 然而,當我單擊某些元素時,會執行動畫(或腳本)。 有什么表明點擊圖片是一個事件?

更新:最初,我正在考慮的是抓取與頁面關聯的JavaScript,然后以某種方式確定是否會觸發事件,但我會嘗試Mark Thomas提出的解決方案並在我測試后將其答案標記為正確。

簡短的回答? 沒有。

答案很長:

為了找出哪些元素觸發腳本,您需要知道將每個元素的偵聽器附加到哪個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中的調用方的說明,請參見本頁的最后部分。 另一個選擇是PhantomJS ,它是一個帶JS API的無頭瀏覽器。

其次,您需要找到一個JavaScript庫,該庫可以了解每個流行的JS庫如何緩存其偵聽器並可以收集信息。 為此,您可以嘗試Visual Event 2

你仍然需要連接這些東西,這需要一些JS hackery。 祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM