我正在尝试构建一个可以处理AJAX应用程序的爬虫程序。我正在使用htmlunit以编程方式进行浏览。
我找不到将所有事件侦听器分配给某些人的方法 DOM元素。我不喜欢我的爬虫试图盲目地调用事件 在每个DOM元素上。
所以我决定覆盖javascript addEventListner函数,所以 它可以保留事件监听器的注册表。问题是:如何 注入这个修改过的javascript代码,并确保它是第一个 页面加载时运行的东西?
抓取工具需要知道分配给DOM-Elements的事件,而不会触发事件。
答案 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属性。