微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过HtmlUnit下载CSV并读入数组

如何解决通过HtmlUnit下载CSV并读入数组

我有一个页面,该页面带有一个按钮,用于下载CSV文件格式的信息。该按钮将打开一个确认对话框以下载文件。我需要将该文件存储到一个临时位置(无论是存储还是保存到实际文件中,然后再删除它),然后将CSV中的数据读取到数组中。

我已经在以下问题(question 1question 2question 3question 4)中尝试过代码,但这并不是我真正需要的-主要是因为它们并没有下载CSV并使用其中的数据。

我不确定是否正在打开ConfirmDialog,但是我确实添加ConfirmHandler并返回true来尝试下载文件。但是,我根本不知道文件在哪里下载。

这就是我正在发生的事情以及被卡住的地方:

登录很好。我去一个报告生成器。我生成一个在新窗口中打开的报告。新窗口打开得很好,我用WebWindowListener捕获了它。然后,我在新窗口中搜索“另存为CSV”按钮。我可以找到它,也可以单击它,但是一个System.out.print调用表明ConfirmHandler没有触发。

for (DomElement e : newPage.getElementsByTagName("button")) {
    int i = 0;
    webClient.setConfirmHandler(new ConfirmHandler() {
        private static final long serialVersionUID = 1L;
        @Override
        public boolean handleConfirm(Page arg0,String arg1) {
            System.out.println("Test"); //isn't firing
            return false;
        }
    });
    if (((HtmlButton) e).getAttribute("onclick").contains("CSV")) {
        ((HtmlButton) e).click();
    }else {
        if (i++ == (newPage.getElementsByTagName("button").size() - 1)) throw new AssertionError("CSV button not found");
    }
}

解决方法

此答案的灵感来自here

我真的很想获取CSV信息而不下载文件,因此,在我的webWindowContentChanged(arg0)的{​​{1}}方法内部,我先使用了webWindowListener,然后又使用了{{1 }}几次以获得我想要的信息。

这是代码的样子,因此更加清晰:

arg0.getWebWindow().getEnclosingPage().getWebResponse().getContentAsString()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。