gpt4 book ai didi

java - 如何使用 HTMLUnit 单击 anchor 下载 ZIP 文件

转载 作者:行者123 更新时间:2023-12-02 10:38:06 25 4
gpt4 key购买 nike

我正在尝试使用以下代码使用 HTMLUnit 2.32 下载 ZIP 文件。

我获得的“myfile.zip”比通过普通浏览器下载的文件大(179kb vs 79kb),并且已损坏。

如何点击 anchor 并使用 HTMLUnit 下载文件?

        WebClient wc = new WebClient(BrowserVersion.CHROME);

final String HREF_SCARICA_CONSOLIDATI = "/web/area-pubblica/quotate?viewId=export_quotate";

final String CONSOBBase = "http://www.consob.it";

HtmlPage page = wc.getPage(CONSOBBase + HREF_SCARICA_CONSOLIDATI);

final String downloadButtonXpath = "//a[contains(@href, 'javascript:downloadAzionariato()')]";
List<HtmlAnchor> downloadAnchors = page.getByXPath(downloadButtonXpath);
HtmlAnchor downloadAnchor = downloadAnchors.get(0);

UnexpectedPage downloadedFile = downloadAnchor.click();

InputStream contentAsStream = downloadedFile.getWebResponse().getContentAsStream();
File destFile = new File("/tmp", "myfile.zip");
Writer out = new OutputStreamWriter(new FileOutputStream(destFile));
IOUtils.copy(contentAsStream, out);
out.close();

最佳答案

已更新您的代码片段以使其正常工作。希望内联注释有助于理解正在发生的事情(使用 HtmlUnit 的最新 SNAPSHOT 代码 (2.34-SNAPSHOT 2018/11/03)

final String HREF_SCARICA_CONSOLIDATI = "http://www.consob.it/web/area-pubblica/quotate?viewId=export_quotate";

try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {
HtmlPage page = webClient.getPage(HREF_SCARICA_CONSOLIDATI);

final String downloadButtonXpath = "//a[contains(@href, 'javascript:downloadAzionariato()')]";
List<HtmlAnchor> downloadAnchors = page.getByXPath(downloadButtonXpath);
HtmlAnchor downloadAnchor = downloadAnchors.get(0);

// click does some javascript magic - have a look at your browser
// seems like this opens a new window with the content as response
// because of this we can ignore the page returned from click
downloadAnchor.click();
// instead of we are waiting a bit until the javascript is done
webClient.waitForBackgroundJavaScript(1000);

// now we have to pick up the window/page that was opened as result of the download
Page downloadPage = webClient.getCurrentWindow().getEnclosedPage();

// and finally we can save to content
File destFile = new File("/tmp", "myfile.zip");
try (InputStream contentAsStream = downloadPage.getWebResponse().getContentAsStream()) {
try (OutputStream out = new FileOutputStream(destFile)) {
IOUtils.copy(contentAsStream, out);
}
}

System.out.println("Output written to " + destFile.getAbsolutePath());
}

关于java - 如何使用 HTMLUnit 单击 anchor 下载 ZIP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com