如何使用java获取DOM事件侦听器

时间:2013-11-25 09:41:14

标签: java javascript dom htmlunit web-crawler

我正在尝试构建一个可以处理AJAX应用程序的爬虫程序。我正在使用htmlunit以编程方式进行浏览。

  • 我找不到将所有事件侦听器分配给某些人的方法 DOM元素。我不喜欢我的爬虫试图盲目地调用事件 在每个DOM元素上。

  • 所以我决定覆盖javascript addEventListner函数,所以 它可以保留事件监听器的注册表。问题是:如何 注入这个修改过的javascript代码,并确保它是第一个 页面加载时运行的东西?

  • 另一个问题:有没有更好的方法来解决这个问题,我希望在那里 就像getEventListners(domElement)一样。

抓取工具需要知道分配给DOM-Elements的事件,而不会触发事件。

1 个答案:

答案 0 :(得分:1)

您可以像这样覆盖addEventListener方法:

// Create a copy or addEventListener for subsequent calls
HTMLElement.prototype.realAddEventListener = HTMLElement.prototype.addEventListener;

// This array should contains all listeners added to each element
HTMLElement.prototype.allListeners = [];

HTMLElement.prototype.addEventListener = function(a,b,c){
    this.realAddEventListener(a,b,c); 
    this.allListeners.push({a : a, b : b , c : c});
};

您可以让所有侦听器在页面上的每个HTMLElement上调用allListeners属性。