如何使用htmlunit更新html中的内容?

时间:2011-06-29 17:09:48

标签: java screen-scraping htmlunit

我发现使用htmlunit非常难以在动态创建新的html内容,就像我们在jquery中所做的那样。

例如给定一个文本节点:

I am text

我希望将文本节点更改为(如果单词大于3个字符,则将其替换 有跨度):

I am <span>text</span>

在此之后我想用

替换原始文本节点(我是文本)
I am <span>text</span>

在html文档中的任何地方。

那么如何使用htmlunit实现这一目标?在Java应用程序中是否有更好的替代htmlunit来进行屏幕抓取或在动态类型的应用程序中修改dom?

在htmlunit中,我甚至无法找到如何构造新元素,因为构造函数大多缺失或声明受保护。

3 个答案:

答案 0 :(得分:3)

目前还不清楚你想要做什么,但HtmlUnit是一个程序化的浏览器。它的API允许用Java在标准浏览器中使用键盘和鼠标进行操作。修改网页的DOM并不是用户用浏览器做的事情。

它的API无论如何都允许访问DOM树(虽然不是通过W3C DOM接口),因此您应该能够在Java中使用DOM在JavaScript中执行的操作。可以通过createElement method of HtmlPage创建HtmlElement个实例。但当然,没有“用于HtmlUnit的Java中的JQuery”。

答案 1 :(得分:2)

HtmlUnit允许您在页面上下文中运行JS脚本。像:

String query = <your query>;
HtmlPage page = webClient.getPage(url);
ScriptResult sr = page.executeJavaScript(query);
HtmlPage newPage = sr.getHtmlPage();

newPage将是您的脚本修改的原始页面的副本。

答案 2 :(得分:1)

HtmlUnit允许您通过Java与页面进行交互,大致与人类通过浏览器与页面交互的方式相同。

您如何在浏览器中修改DOM?

您不是,而不是直接:而是单击或键入以在页面中触发Javascript,从而修改DOM。同样,使用HtmlUnit,您的Java代码会在页面中触发Javascript,从而修改DOM。