HTMLUnit 未 return 完全加载页面 JavaScript

HTMLUnit not return completely loaded page with JavaScript

我正在尝试获取网络 page 的内容,即带有公寓列表的页面右侧(div 元素 class="classified").在浏览器中查看页面时,很明显它使用 JavaScript.

我正在为 Java 使用 HtmlUnit,尤其是 waitForBackgroundJavaScript(10000) 方法等待 JavaScript 是完成的。但是,它仍然对我不起作用,我得到了与初始调用相同的显示公寓页面的 HTML w/o 元素。

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http.client").setLevel(Level.OFF);

URL url = new URL("https://r.onliner.by/pk/#bounds%5Blb%5D%5Blat%5D=53.75074091071493&bounds%5Blb%5D%5Blong%5D=27.301025390625004&bounds%5Brt%5D%5Blat%5D=54.04527964804286&bounds%5Brt%5D%5Blong%5D=27.822875976562504");

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);

HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(50000); 

System.out.println(page.asXml());

webClient.close();

启用 setThrowExceptionOnScriptError 在 Java 脚本代码中显示一些异常(我不确定它是否与问题相关,因为浏览器中没有此类问题) .

我也试过其他一些方法,比如

// option 2
webClient.waitForBackgroundJavaScriptStartingBefore(50000);

// option 3
webClient.setJavaScriptTimeout(50000);

// option 4
JavaScriptJobManager manager = page.getEnclosingWindow().getJobManager();
while (manager.getJobCount() > 0)
    Thread.sleep(1000);

但没有任何效果。能否请教如何获取页面内容?

鉴于 HTMLUnit 在 JavaScript 中存在的问题,您需要找到解决方法。看到你知道你想要哪个元素,你可以实现一个 while 循环。这可能看起来像这样:

while(!page.asText().contains(„<div id=\„exmaple-id\">“)){
        webClient.waitForBackgroundJavaScript(500);
    }

如果你害怕陷入这个循环,你可以在while条件中加入一个计数变量。就我的经验而言,这是处理这种延迟的可靠方法吗?