2012-02-02 66 views
5

我需要从网站获取代码,部分代码为“纯HTML”,部分代码使用AJAX生成HTML代码,Javascript。Java-如何从URL获取HTML代码,包括使用Firebug或任何Java库的AJAX生成代码

由于最简单的方式来获取它似乎使用Firebug,我以为它必须存在一种方式来使用Firebug或它的一些插件能够从Java代码中完成它。

我遇到的问题是,通过搜索很多网站和门户网站后,我什么也没找到。

任何人都知道某种方式/一些插件...这使得这个AJAX生成的代码与静态HTML混合在一起成为可能,就像Firebug那样?

谢谢,请原谅我的英语。

+0

我不确定你在问什么。这个解释是否正确?你想用Java来加载一个URL的内容,该URL包含任何动态生成的内容,如果URL已经使用Web浏览器加载,那么这些内容将会生成。 – Aatch 2012-02-02 01:20:30

+0

不完全;我需要获取返回的代码,即Firebug,包括使用AJAX生成的代码;如果我在一个简单的浏览器中观察代码,而不是使用AJAX生成的DIV“示例”中的表格,我只能看到DIV,而不是动态生成的代码。 Firebug也显示这个AJAX生成的代码。 – 2012-02-02 02:06:50

+0

这就是我说的基本上。当你做一个视图源代码时,你会看到页面的源代码HTML,但是萤火虫不会显示HTML的来源,而是DOM的当前结构。 AJAX和JavaScript改变了DOM,但萤火虫仍然可以显示当前页面的“有效”源代码。 – Aatch 2012-02-02 02:40:40

回答

2

Abhijeet有点不错,但我会花时间解释浏览器如何处理网页并帮助您理解您的请求如此困难的原因。

警告这是相当粗糙,我捏造了简洁和清晰

浏览器连接到服务器,并使用HTTP检索您请求的页面的一些细节。下载该页面后,浏览器将搜索页面中引用的任何其他资源并检索它们。然后执行从顶部到底部的任何JavaScript,包括任何引用的脚本。这个JavaScript可以操纵页面,但是到了这一步,浏览器并不关心页面的原始源代码,将它内化为DOM或文档对象模型。 JavaScript实际上只是在操纵这个DOM,因为DOM只是一个树形结构,而不是做任何源代码操作。因此,firebug(或webkit检查器)实际上并不显示源代码,它们显示DOM的当前状态的表示。

您的请求的问题在于,您希望使用单独的系统来加载url,然后执行上面的整个过程,不幸的是,这需要您在Java中实现整个JavaScript引擎。

但是,一切都不会丢失。 HTMLUnit(由其他人提到)是用Java编写的工作的无头浏览器,因此可以将它集成到您​​的程序中。实际上,这超出了本答案的范围,但主页为here,API文档为here

+0

是的,这就是为什么我最终决定在这里问一下它的原因,因为我不明白这样有用的东西还没有实现,至少不是用它作为库或插件。它真的不可用。 – 2012-02-02 03:53:39

2

您可以做到这一点的唯一方法是嗅探所有GET/POST请求正在做什么。因此,请启动Firebug &查看正在进行的GET/POST请求。

然后,您可以使用URLConnection类在Java代码中执行该操作。

您还可以尝试使用像htmlunit这样的无头浏览器。