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

Java HtmlUnit-将HtmlPage转换为HTML字符串?,java,html,xml,htmlunit,Java,Html,Xml,Htmlunit,我正在使用HtmlUnit为各种页面生成HTML,但是现在,要将页面转换为服务器返回的原始HTML,我能做的最好的事情就是将HtmlPage转换为XML字符串 这有点烦人,因为web浏览器呈现的XML输出与原始HTML呈现的不同。有没有办法将HTML页面转换为原始HTML而不是XML 谢谢 我不能百分之百确定我是否正确理解了这个问题,但这可能会解决您的问题: page.getWebResponse().getContentAsString()将返回HTMLpage.asText()将其还原为文本

我正在使用HtmlUnit为各种页面生成HTML,但是现在,要将页面转换为服务器返回的原始HTML,我能做的最好的事情就是将HtmlPage转换为XML字符串

这有点烦人,因为web浏览器呈现的XML输出与原始HTML呈现的不同。有没有办法将HTML页面转换为原始HTML而不是XML


谢谢

我不能百分之百确定我是否正确理解了这个问题,但这可能会解决您的问题:


page.getWebResponse().getContentAsString()将返回HTML
page.asText()
将其还原为文本。

除了切换页面类型之外,我不知道答案,对于XmlPage和SgmlPage,必须在HTML元素上执行innerHTML并手动写出属性。不优雅和精确(缺少doctype),但它可以工作

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>")

以下是我的解决方案:

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

只想确认这只返回文本节点中的文本,不包括标记及其属性。getWebResponse()返回原始页面,不包含脚本所做的修改。因此,asXml()和asText()是获得最终页面的更好的解决方案。
ScriptResult scriptResult = htmlPage.executeJavaScript("document.documentElement.outerHTML;");
System.out.println(scriptResult.getJavaScriptResult().toString());