javascript - HTMLUnit 未使用 JavaScript 返回完全加载的页面

标签 javascript java html htmlunit sourceforge

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

我正在使用 HtmlUnit for Java,特别是 waitForBackgroundJavaScript(10000) 方法来等待 JavaScript 完成。然而,它对我来说仍然不起作用,我得到了与初始调用相同的 HTML,没有显示公寓页面的元素。

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会显示JavaScript代码中的一些异常(我不确定它是否与问题相关,因为浏览器中没有此类问题)。

我还尝试了其他一些方法,例如

// 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 条件中添加一个计数变量。根据我的经验,这是处理这种延迟的可靠方法吗?

关于javascript - HTMLUnit 未使用 JavaScript 返回完全加载的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57999500/

相关文章:

Javascript 对象字面量 - 调用

javascript - 如何隐藏客户端 api key ?

javascript - 从 JavaScript 访问元素的 CSS 样式属性的正确方法是什么?

读取文本文件时Java不返回值

java - 使用servlet在新窗口中打开pdf文件

javascript - 如何在 jQuery 验证中检查元素是否具有类?

Java 格式详细的日期差异

javascript - 向动态创建的元素添加 id

javascript - 问题通过链接更改嵌入式Youtube视频

css - div 在浏览器调整大小时移动不正确