Java 如何通过HTMLUnit单击锚点下载ZIP文件

Java 如何通过HTMLUnit单击锚点下载ZIP文件,java,htmlunit,Java,Htmlunit,我正在尝试使用以下代码下载一个带有HTMLUnit 2.32的ZIP文件 我获得的“myfile.zip”比通过普通浏览器下载的文件(179kb对79kb)大,并且已损坏 一个人应该如何点击一个锚并下载一个带有HTMLUnit的文件 WebClient wc = new WebClient(BrowserVersion.CHROME); final String HREF_SCARICA_CONSOLIDATI = "/web/area-pubblica/quo

我正在尝试使用以下代码下载一个带有HTMLUnit 2.32的ZIP文件

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

一个人应该如何点击一个锚并下载一个带有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();
WebClient wc=新的WebClient(BrowserVersion.CHROME);
最后一个字符串HREF_SCARICA_consolidation=“/web/area pubblica/quotate?viewId=export”u quotate”;
最后一个字符串CONSOBBase=”http://www.consob.it";
HtmlPage=wc.getPage(CONSOBBase+HREF\u SCARICA\u consolidation);
最后一个字符串downloadButtonXpath=“/a[contains(@href,'javascript:downloadAzionariato()')”;
List downloadAnchors=page.getByXPath(downloadButtonXpath);
HtmlAnchor downloadAnchor=downloadAnchor.get(0);
UnexpectedPage downloadedFile=downloadAnchor.click();
InputStream contentAsStream=downloadedFile.getWebResponse().getContentAsStream();
File destFile=新文件(“/tmp”,“myfile.zip”);
Writer out=new OutputStreamWriter(new FileOutputStream(destFile));
IOUtils.copy(contentAsStream,out);
out.close();

已对代码片段进行了一些更新,使其能够正常工作。希望内联评论有助于理解正在发生的事情(使用HtmlUnit的最新快照代码(2.34-SNAPSHOT 2018/11/03)

final String HREF\u SCARICA\u consolidation=”http://www.consob.it/web/area-pubblica/quotate?viewId=export_quotate";
试试(final-WebClient-WebClient=new-WebClient(BrowserVersion.firefox60)){
HtmlPage=webClient.getPage(HREF\u SCARICA\u consolidation);
最后一个字符串downloadButtonXpath=“/a[contains(@href,'javascript:downloadAzionariato()')”;
List downloadAnchors=page.getByXPath(downloadButtonXpath);
HtmlAnchor downloadAnchor=downloadAnchor.get(0);
//点击做一些javascript魔术-看看你的浏览器
//这似乎打开了一个新窗口,内容作为响应
//因此,我们可以忽略单击返回的页面
downloadAnchor.click();
//相反,我们需要等待一点,直到javascript完成
webClient.waitForBackgroundJavaScript(1000);
//现在,我们必须选择下载后打开的窗口/页面
Page downloadPage=webClient.getCurrentWindow().getEnclosedPage();
//最后,我们可以保存到内容
File destFile=新文件(“/tmp”,“myfile.zip”);
尝试(InputStream contentAsStream=downloadPage.getWebResponse().getContentAsStream()){
try(OutputStream out=新文件OutputStream(destFile)){
IOUtils.copy(contentAsStream,out);
}                                                                                                      
}                                                                                                          
System.out.println(“输出写入”+destFile.getAbsolutePath());
}                                                                                                              

虽然RBRi的考虑因素很有趣,但我发现我的代码在使用HTMLUnit 2.32时没有做任何修改,但我写文件的方式是错误的

我曾经

Writer out = new OutputStreamWriter(new FileOutputStream(destFile));
IOUtils.copy(contentAsStream, out);
虽然它必须是(无OutputStreamWriter)


我发现我的代码可以工作,但我没有使用OutputStreamWriter。谢谢你有趣的代码
Writer out = new OutputStreamWriter(new FileOutputStream(destFile));
IOUtils.copy(contentAsStream, out);
FileOutputStream out = new FileOutputStream(destFile);
IOUtils.copy(contentAsStream, out);