2011-06-27 137 views
6

我正在使用HtmlUnit为各种页面生成HTML,但现在,我可以做的最好的方法是将页面转换为服务器返回的原始HTML,并将HtmlPage转换为XML字符串。HtmlUnit - 将HtmlPage转换为HTML字符串?

这有点令人讨厌,因为Web浏览器呈现的XML输出与原始HTML不同。有没有办法将HtmlPage转换为原始HTML而不是XML?

谢谢!

回答

5

我不是100%肯定我理解正确的问题,但也许这将解决您的问题。

page.getWebResponse()getContentAsString()

+0

getWebResponse()返回原始页面,不需要脚本进行修改。所以asXml()和asText()是获得最终页面的更好解决方案。 – snorbi

7

page.asXml()将返回HTML。 page.asText()将其呈现为仅显示文本。

+0

只是想确认这只返回文本节点内的文本,不包括标签及其属性。 –

0

我不知道在页面类型和XmlPage和SgmlPage上切换开关的问题,必须在HTML元素上执行innerHTML并手动写出属性。不优雅和确切(它缺少文档类型),但它的工作原理。

Page.getWebResponse()。getContentAsString()

这是不正确的,它返回原来的未渲染,没有JS字节文本形式。如果JavaScript执行并更改内容,那么此方法将不会看到更改。

page.asXml()将返回HTML。 page.asText()将其呈现为文本。

只想确认这只返回文本节点内的文本,不包括标签及其属性。如果你想采取完整的HTML,这不是一件好事。

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(); 
     } 
1

我觉得有没有直接的方法以获得最终页面的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());