我正在使用HtmlUnit为各种页面生成HTML,但现在,我可以做的最好的方法是将页面转换为服务器返回的原始HTML,并将HtmlPage转换为XML字符串。HtmlUnit - 将HtmlPage转换为HTML字符串?
这有点令人讨厌,因为Web浏览器呈现的XML输出与原始HTML不同。有没有办法将HtmlPage转换为原始HTML而不是XML?
谢谢!
我正在使用HtmlUnit为各种页面生成HTML,但现在,我可以做的最好的方法是将页面转换为服务器返回的原始HTML,并将HtmlPage转换为XML字符串。HtmlUnit - 将HtmlPage转换为HTML字符串?
这有点令人讨厌,因为Web浏览器呈现的XML输出与原始HTML不同。有没有办法将HtmlPage转换为原始HTML而不是XML?
谢谢!
我不是100%肯定我理解正确的问题,但也许这将解决您的问题。
page.getWebResponse()getContentAsString()
page.asXml()
将返回HTML。 page.asText()
将其呈现为仅显示文本。
只是想确认这只返回文本节点内的文本,不包括标签及其属性。 –
我不知道在页面类型和XmlPage和SgmlPage上切换开关的问题,必须在HTML元素上执行innerHTML并手动写出属性。不优雅和确切(它缺少文档类型),但它的工作原理。
Page.getWebResponse()。getContentAsString()
这是不正确的,它返回原来的未渲染,没有JS字节文本形式。如果JavaScript执行并更改内容,那么此方法将不会看到更改。
page.asXml()将返回HTML。 page.asText()将其呈现为文本。
只想确认这只返回文本节点内的文本,不包括标签及其属性。如果你想采取完整的HTML,这不是一件好事。
也许你想去的地方,而不是使用框架的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();
}
我觉得有没有直接的方法以获得最终页面的HTML。 asXml()以XML形式返回结果,asText()返回提取的文本内容。
你能做的最好是用asXml()和 “改造” 它HTML:
htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>")
(当然你可以将更多的转换像转换< BR/>到<BR> - 它取决于您的要求)
即使related Google documentation建议使用此方法(虽然他们不应用任何转换):
// return the snapshot
out.println(page.asXml());
getWebResponse()返回原始页面,不需要脚本进行修改。所以asXml()和asText()是获得最终页面的更好解决方案。 – snorbi