Java - 检测使用 htmlUnit 加载的网页 ajax 组件的更改

问题描述

我正在使用 HtmlUnit 加载包含动态更新的 ajax 组件的网页,使用以下内容:-

WebClient webClient = new WebClient(browserVersion.CHROME);
URL url = new URL("https://live.xxx.com/en/ajax/getDetailedQuote/" + instrument);
WebRequest requestSettings = new WebRequest(url,HttpMethod.POST); 
HtmlPage redirectPage = webClient.getPage(requestSettings);

这有效,我在请求时获得了页面内容

不过,我希望能够监控和响应页面上的更改。

我尝试了以下方法:-

webClient.addWebWindowListener(new WebWindowListener() {

        public void webWindowContentChanged(WebWindowEvent event) {
            System.out.println("Content changed ");
        }
    });

但我只在页面首次加载时收到“内容已更改”,而不是在页面更新时收到。

解决方法

我担心 HtmlUnit 并没有真正的解决方案(至少不是开箱即用的)。仅当窗口内的(整个)页面被替换时才会调用 webWindowContentChanged 钩子。

您可以尝试实现 DomChangeListener 并将其附加到页面(或者可能是页面的正文)。

如果您想在 http 级别更多地跟踪 ajax 请求,您可以选择拦截请求(有关详细信息,请参阅 https://htmlunit.sourceforge.io/faq.html#HowToModifyRequestOrResponse)。

如果您需要更多,请打开一个问题,我们可以讨论。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...