我发现使用htmlunit非常难以在动态创建新的html内容,就像我们在jquery中所做的那样。
例如给定一个文本节点:
I am text
我希望将文本节点更改为(如果单词大于3个字符,则将其替换 有跨度):
I am <span>text</span>
在此之后我想用
替换原始文本节点(我是文本)I am <span>text</span>
在html文档中的任何地方。
那么如何使用htmlunit实现这一目标?在Java应用程序中是否有更好的替代htmlunit来进行屏幕抓取或在动态类型的应用程序中修改dom?
在htmlunit中,我甚至无法找到如何构造新元素,因为构造函数大多缺失或声明受保护。
答案 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。