【问题标题】:How to get DOM event listeners using java如何使用 java 获取 DOM 事件侦听器
【发布时间】:2013-12-09 22:11:44
【问题描述】:

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

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

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

  • 另一个问题:有没有更好的方法来解决这个问题,我希望有 是类似 getEventListners(domElement) 的函数。

爬虫需要知道分配给 DOM-Elements 的事件而不触发事件。

【问题讨论】:

    标签: java javascript dom htmlunit web-crawler


    【解决方案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 属性。

    【讨论】:

    • 问题是:如何注入修改后的 javascript 代码,并确保它在页面加载时首先运行?... 以编程方式发出的请求如下: webClient.getPage("localhost/....." ); * 我需要在原始 addEventLitener 被调用之前在响应中注入重写的 addEventListener 方法。
    • 我认为你可以使用 ScriptPreprocesor 来完成这个任务:htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/…
    • 谢谢,,这看起来很有希望,我会进行一些测试。
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 2021-09-12
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多