繁体   English   中英

Java HtmlUnit下载pdf文件

[英]Java HtmlUnit download pdf file

我想使用HtmlUnit从网站上下载pdf文件,但我还没有做到这一点。 通过单击以下按钮触发下载:

<form name="form" action="ADIR_24046/civil/documentos/docuN.php" method="post" target="w1">

    <input type="hidden" name="dtaDoc" value="7F547EA1167820365C20BA632B62A44E0B8F37564FCB3369284927C9763DE47F23DF398C061062F1">

    <i class="fa fa-file-pdf-o fa-lg" aria-hidden="true" style="color:#ab5659; cursor:pointer;" onclick="$(this).closest(&quot;form&quot;).submit();"></i>

</form>

到目前为止,每次我尝试打开文件时,它都表示文件已损坏。 我下载文件的代码是:

public void getFile(HtmlTableRow row, String folio) throws IOException {        
    HtmlPage pdfPage = (HtmlPage) frame.executeJavaScript("document.getElementById('historiaCiv').children[0].children[0].children[" + 
    row.getIndex() + "].children[1].children[0].children[1].children[0].closest('form').submit()").getNewPage();

    ReadableByteChannel rbc = Channels.newChannel(pdfPage.getWebResponse().getContentAsStream());
    FileOutputStream fos = new FileOutputStream(/* download path */, false);
    fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
}

有什么好办法吗?

没有更多的详细信息和要测试的真实页面,我只能为解决问题提供一些提示。

将您的问题一分为二:

  1. 单击正确的元素,并确保HtmlUnit下载pdf
  2. 从程序中获取pdf并保存/分析

开始之前:

确保您没有JavaScript错误; 错误可能会停止或中断处理。 使用webclient的简单(默认)设置。 仅更改配置以解决问题,并确保您知道自己在做什么。 并确保使用可用的最新(快照)版本。

第1步:

HtmlUnit的工作方式类似于由您(您的程序)驱动的浏览器,而不是用户四处浏览的浏览器。 通常,无需像示例中那样注入javascript。 找到用户通常单击的控件,然后简单地调用click。 由于ajax的原因,您可能需要等待一段时间才能完成所有异步操作。 使用类似于Charles的Web代理(或启用HttpClient有线日志记录)来查看网络流量。 单击正确的控件应导致在Charles中看到pdf下载。

第2步

从您的信息中,我想您正在使用的不是基于HTML的pdf下载页面。 如今,有许多“聪明”的javascript框架围绕着做奇怪的事情来使下载更加用户友好。 这意味着下载是异步完成的,对于您来说,单击操作的结果通常是htmlpage而不是pdf结果。 如果第1步成功,则必须从Web客户端获取新打开的窗口,并从该窗口中获取(pdf)内容。

希望对您有所帮助,如果您需要更多帮助,则必须提供更多详细信息(或者也许可以尝试使用诸如wetator之类的高级工具,该工具可以处理所有这些奇怪的页面,并且具有很多魔力)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM