Java 使用HtmlUnit每页下载多个文件

Java 使用HtmlUnit每页下载多个文件,java,htmlunit,Java,Htmlunit,我正在用HtmlUnit浏览一个网站。 它有一个表,带有供下载的文档列表。我想点击所有的链接,收集所有的文件(别担心,信息是公开的,不禁止刮擦) 由于是用JSF编写的,因此指向文档的链接实际上是,如果没有页面重新加载,我也无法做到这一点。我认为诀窍在于只在onclick()属性上从执行JavaScript 这个: return oamSubmitForm('broi_form','broi_form:dataTable1:4:_idJsp110',null,[['id_','3545']]);'

我正在用HtmlUnit浏览一个网站。 它有一个表,带有供下载的文档列表。我想点击所有的链接,收集所有的文件(别担心,信息是公开的,不禁止刮擦)


由于是用JSF编写的,因此指向文档的链接实际上是
,如果没有页面重新加载,我也无法做到这一点。我认为诀窍在于只在
onclick()
属性上从执行JavaScript

这个:

return oamSubmitForm('broi_form','broi_form:dataTable1:4:_idJsp110',null,[['id_','3545']]);');
也许这对你有帮助

public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException
{
    final WebClient webClient = new WebClient();

    HtmlPage page = webClient.getPage("http://dv.parliament.bg/DVWeb/broeveList.faces");

    for (HtmlAnchor link : (List<HtmlAnchor>) page.getByXPath("//table[@id='broi_form:dataTable1']//a/img/.."))
    {
        String commandString = link.getOnClickAttribute().replaceAll("return ", "");
        System.out.println(commandString);

        ScriptResult executeJavaScript = page.executeJavaScript(commandString);

        Page newPage = executeJavaScript.getNewPage();
        save(newPage.getWebResponse().getContentAsStream());

        page = webClient.getPage("http://dv.parliament.bg/DVWeb/broeveList.faces");
    }

}
publicstaticvoidmain(字符串[]args)引发FailingHttpStatusCodeException、MalformedURLException、IOException
{
最终WebClient WebClient=新WebClient();
HtmlPage=webClient.getPage(“http://dv.parliament.bg/DVWeb/broeveList.faces");
对于(HtmlAnchor链接:(列表)page.getByXPath(//table[@id='broi\u form:dataTable1']///a/img/。)
{
String commandString=link.getOnClickAttribute().replaceAll(“return”,“return”);
System.out.println(commandString);
ScriptResult executeJavaScript=page.executeJavaScript(commandString);
Page newPage=executeJavaScript.getNewPage();
保存(newPage.getWebResponse().getContentAsStream());
page=webClient.getPage(“http://dv.parliament.bg/DVWeb/broeveList.faces");
}
}

但这不是正确的方法…

每次下载后,这对我都有效:

page = (HtmlPage) page.refresh();

如果我没记错的话,如果使用link.click()导航,驱动程序的内部状态会发生变化。因此,您需要返回到原始页面。我也尝试过,调用了htmlPage.getEnclosuringWindow().getHistory().back()-没有效果告诉我们您不想扫描哪个页面?(这是保加利亚语,这就是为什么我没有提供链接。但图标是不言自明的)不,还是一样:(我没有完全使用最后一行,因为我无法轻松重新分配页面属性,但我尝试了重新请求(并刷新)这个页面,没有任何幸运,但是你的代码是孤立工作的,这很奇怪,所以我将尝试找出区别。谢谢。
page = (HtmlPage) page.refresh();