[英]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("form").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);
}
有什么好辦法嗎?
沒有更多的詳細信息和要測試的真實頁面,我只能為解決問題提供一些提示。
將您的問題一分為二:
開始之前:
確保您沒有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.