我正在使用HtmlUnit生成各种页面的HTML,但现在,我能够做的最好的事情是将HtmlPage转换为XML字符串,以获得服务器返回的原始HTML页面。这有点烦人,因为Web浏览器以不同于原始HTML的方式呈现XML输出。有没有一种方法可以将HtmlPage转换为原始的HTML而不是XML?谢谢!
page.asXml()
会返回HTML代码。而 page.asText()
则将其渲染成纯文本。
我不完全确定我是否正确理解了这个问题,但也许这可以解决您的问题:
page.getWebResponse().getContentAsString()
这行代码是用于获取页面响应内容并以字符串形式返回。我认为没有直接获取HTML格式的最终页面的方法。 asXml()返回结果为XML格式,asText()返回提取的文本内容。
你所能做的最好的事情就是使用asXml()并将其“转换”为HTML格式:
htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>")
// return the snapshot
out.println(page.asXml());
try (InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream());
BufferedReader br = new BufferedReader(isr);){
String line ="";
String htmlSource ="";
while((line = br.readLine()) != null)
{
htmlSource += line + "\n";
}
return htmlSource;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是我适用的解决方案:
ScriptResult scriptResult = htmlPage.executeJavaScript("document.documentElement.outerHTML;");
System.out.println(scriptResult.getJavaScriptResult().toString());
我不知道除了在页面类型上使用开关之外还有什么答案,对于XmlPage和SgmlPage,必须对HTML元素进行innerHTML操作,并手动编写属性。这并不优雅且不完美(缺少doctype),但它可以工作。
Page.getWebResponse().getContentAsString()
这是不正确的,因为它返回原始未呈现的文本形式,没有js字节。如果javascript执行并更改内容,则此方法将无法看到更改。
page.asXml()将返回HTML。page.asText()将其呈现为纯文本。
只想确认这仅返回文本节点中的文本,不包括标记及其属性。如果您希望获取完整的HTML,则这不够好。