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

8
我正在使用HtmlUnit生成各种页面的HTML,但现在,我能够做的最好的事情是将HtmlPage转换为XML字符串,以获得服务器返回的原始HTML页面。这有点烦人,因为Web浏览器以不同于原始HTML的方式呈现XML输出。有没有一种方法可以将HtmlPage转换为原始的HTML而不是XML?谢谢!
6个回答

11

page.asXml() 会返回HTML代码。而 page.asText() 则将其渲染成纯文本。


只想确认这个程序仅返回文本节点内的文本,不包括标签及其属性。 - mP.

6

我不完全确定我是否正确理解了这个问题,但也许这可以解决您的问题:

page.getWebResponse().getContentAsString()

这行代码是用于获取页面响应内容并以字符串形式返回。

getWebResponse() 返回原始页面,不包括脚本所做的修改。因此,asXml() 和 asText() 是获取最终页面的更好解决方案。 - snorbi

1

我认为没有直接获取HTML格式的最终页面的方法。 asXml()返回结果为XML格式,asText()返回提取的文本内容。

你所能做的最好的事情就是使用asXml()并将其“转换”为HTML格式:

htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>")

(Of course,您可以应用更多的转换,比如将 <br/> 转换为 <br> - 这取决于您的需求。)
即使相关的Google文档也推荐这种方法(尽管他们不应用任何转换):
// return the snapshot
out.println(page.asXml());

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

0

这是我适用的解决方案:

ScriptResult scriptResult = htmlPage.executeJavaScript("document.documentElement.outerHTML;");
System.out.println(scriptResult.getJavaScriptResult().toString());

0

我不知道除了在页面类型上使用开关之外还有什么答案,对于XmlPage和SgmlPage,必须对HTML元素进行innerHTML操作,并手动编写属性。这并不优雅且不完美(缺少doctype),但它可以工作。

Page.getWebResponse().getContentAsString()

这是不正确的,因为它返回原始未呈现的文本形式,没有js字节。如果javascript执行并更改内容,则此方法将无法看到更改。

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

只想确认这仅返回文本节点中的文本,不包括标记及其属性。如果您希望获取完整的HTML,则这不够好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接