我正在使用HtmlUnit为各种页面生成HTML,但是现在,将页面转换为服务器返回的原始HTML的最佳方法是将HtmlPage转换为XML字符串。
这有点令人讨厌,因为Web浏览器呈现的XML输出与原始HTML不同。有没有办法将HtmlPage转换为原始HTML而不是XML?
谢谢!
答案 0 :(得分:9)
page.asXml()
将返回HTML。 page.asText()
将其呈现为仅发送文字。
答案 1 :(得分:5)
我不是100%确定我正确地理解了这个问题,但也许这会解决你的问题:
page.getWebResponse()。getContentAsString()
答案 2 :(得分:1)
我认为没有直接的方法可以将最终页面作为HTML。 asXml()以XML格式返回结果,asText()返回提取的文本内容。
您可以做的最好的事情是使用asXml()并将其“转换”为HTML:
htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>")
(当然,您可以应用更多转换,例如将&lt; br /&gt;转换为&lt; br&gt; - 这取决于您的要求。)
即使related Google documentation推荐这种方法(尽管它们不应用任何转换):
// return the snapshot
out.println(page.asXml());
答案 3 :(得分:0)
我不知道在页面类型上切换的答案,对于XmlPage和SgmlPage,必须在HTML元素上执行innerHTML并手动写出属性。不优雅和精确(它缺少doctype)但它的确有效。
<强> Page.getWebResponse()。getContentAsString()强>
这是不正确的,因为它返回原始未渲染的文本格式,没有js字节。如果javascript执行并更改内容,则此方法将不会看到更改。
page.asXml()将返回HTML。 page.asText()将其呈现为仅文本。
只想确认这一点只返回文本节点中的文本,并且不包含标记及其属性。如果你想采用完整的HTML,这不是很好的。
答案 4 :(得分:0)
也许您想要使用类似的东西,而不是使用HtmlUnit框架的方法:
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();
}
答案 5 :(得分:0)
这是适合我的解决方案:
ScriptResult scriptResult = htmlPage.executeJavaScript("document.documentElement.outerHTML;");
System.out.println(scriptResult.getJavaScriptResult().toString());