我在使用java检索HTML页面的内容时遇到问题。我已经描述了下面的问题。
我在java中加载一个返回HTML页面的URL。
此页面使用javascript。因此,当我在浏览器中加载URL时,会发生一个javascript函数调用 AFTER 页面已加载(HTML页面的onBodyLoad),并修改了网页上的某些内容(div id的innerHtml之一) 。我在浏览器中可以看到此更改。
现在,当我尝试使用java做同样的事情时,我只获取页面的HTML内容, BEFORE javascript调用已经发生。
我想要做的是,在javascript函数调用发生后获取html页面的内容,所有这一切都必须使用java来完成。
我该怎么做?我的方法应该是什么?
答案 0 :(得分:1)
您需要使用也将执行JavaScript的服务器端浏览器库,以便您可以获取JavaScript更新的DOM内容。默认的浏览器机制不会这样做,这就是为什么你没有得到预期的结果。
您应该尝试使用Cobra:Java HTML Parser,它将执行您的JavaScript。 See here for the download以及有关如何使用它的文档。
<强>眼镜蛇:强>
它支持Javascript。解析期间发生的DOM修改将反映在生成的DOM中。但是,可以禁用Javascript。
答案 1 :(得分:0)
对于读到这个答案的人来说,Scott的答案对我来说是一个起点。 Cobra项目早已死亡,无法处理使用复杂JavaScript的页面。
然而,有一种名为HTML Unit的东西正是我想要的。
这是一个小描述:
HtmlUnit是“用于Java程序的GUI-Less浏览器”。它模拟HTML文档,并提供一个API,允许您调用页面,填写表单,单击链接等...就像在“普通”浏览器中一样。
它具有相当好的JavaScript支持(不断改进),即使使用非常复杂的AJAX库也可以工作,根据您要使用的配置模拟Firefox或Internet Explorer。
它通常用于测试目的或从网站检索信息。