【问题标题】:How to get Output (Image or PDF) from a Web Page using Htmlunit (Including external images and css)如何使用 Htmlunit 从网页获取输出(图像或 PDF)(包括外部图像和 css)
【发布时间】:2018-09-28 00:55:30
【问题描述】:
WebClient webClient = new WebClient();
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setCssEnabled(true);
        webClient.getOptions().setDownloadImages(true);


        Page page = webClient.getPage("http://www.example.com");
        WebResponse response = page.getWebResponse();

我应该如何使用response 来渲染图像或pdf?

我发现了几个问题和几个“这样做”的库。

但我无法在其中任何一个中,通过http请求将返回转换为图像或pdf的有效方式,自动下载并包含所有css和图像外部链接。

我不关心格式(PNG 或 PDF),只要输出与浏览器呈现的相似即可。

【问题讨论】:

  • Javascript 能够渲染 dom 的 SVG (dom2svg),这是你需要的吗?

标签: java web-scraping htmlunit


【解决方案1】:

你有两个选择:

1) 继续使用 htmlUnit,使用

获取响应的 HTML
page.asXml();

然后使用像 iTextRenderer 这样的第三方:https://stackoverflow.com/a/17826418/3650731

2) 或者您可以使用 Headless Chrome 并用它截屏。在大多数情况下,输出应该比使用 htmlUnit + iText 更好,因为 htmlUnit 不会像 Headless chrome 那样呈现 Javascript / 现代 Html5 /css3。

这是我写的一篇关于使用 Java 的 Headless Chrome 的博文:https://ksah.in/introduction-to-chrome-headless/

这是一个关于如何使用 Headless chrome 截屏的答案:https://stackoverflow.com/a/43388989/3650731

【讨论】:

    【解决方案2】:

    HtmlUnit 是一个无头浏览器,最终这意味着根本没有页面渲染/布局。

    根据您的用例,您可以将页面的 XHtml 转储写入磁盘,并注意转储所需的依赖项。这就是我为 WETATOR (www.wetator.org) 所做的事情。源代码免费提供,喜欢的可以看看(或许可以从https://wetator.repositoryhosting.com/trac/wetator_wetator/browser/trunk/wetator/src/org/wetator/backend/htmlunit/XHtmlOutputter.java开始)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2018-02-09
      • 1970-01-01
      • 2014-10-23
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多