簡體   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