HtmlUnit - 将HtmlPage转换为HTML字符串?

时间:2011-06-27 18:19:20

标签: java html xml htmlunit

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

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

谢谢!

6 个答案:

答案 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());