我试图让网站的内容页面,即页面的右侧公寓的列表(类div元素=“分类”)。在浏览器中查看页面时,很明显它使用了 JavaScript。我正在使用 HtmlUnit for Java,尤其是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 会显示 JavaScript 代码中的一些异常(我不确定它是否与问题相关,因为浏览器中没有此类问题)。我也尝试过其他一些方法,例如// option 2webClient.waitForBackgroundJavaScriptStartingBefore(50000);// option 3webClient.setJavaScriptTimeout(50000);// option 4JavaScriptJobManager manager = page.getEnclosingWindow().getJobManager();while (manager.getJobCount() > 0) Thread.sleep(1000);但没有任何效果。您能否建议如何获取页面内容?
1 回答
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
鉴于 HTMLUnit 与 JavaScript 的问题,您需要找到一种解决方法。看到你知道你想要哪个元素,你可以实现一个while循环。这可能看起来像这样:
while(!page.asText().contains(„<div id=\„exmaple-id\">“)){
webClient.waitForBackgroundJavaScript(500);
}
如果你害怕在这个循环中被抓住,你可以在 while 条件中添加一个计数变量。就我的经验而言,这是处理这种延迟的可靠方法。
添加回答
举报
0/150
提交
取消