当前位置: 首页 > 面试题库 >

使用htmlunit在javascript按钮后面下载文件

林劲
2023-03-14
问题内容

我正在尝试使用HtmlUnit在javascript按钮后面下载附件。执行其他任务效果很好(例如,导航,登录)。我检查了附件单元测试,但没有帮助我。

final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
final HtmlPage page1 = webClient.getPage( loginUrl );
final HtmlTextInput textField =  page1.getElementByName(user);
final HtmlPasswordInput pwd =  page1.getElementByName(pwd);  
textField.setValueAttribute(User.getUsername());
pwd.setValueAttribute(User.getPassword());

final HtmlSubmitInput button =  page1.getElementByName(login);
final HtmlPage page2 =  button.click();

String buttonJavaScript = "window.location='"+folder+filename + ....... ";
ScriptResult result = page2.executeJavaScript(buttonJavaScript);
webClient.waitForBackgroundJavaScript(2000);

InputStream is = result.getNewPage().getWebResponse().getContentAsStream();
try {
    File f = new File("filename.extension");
    OutputStream os = new FileOutputStream(f);
    byte[] bytes = new byte[1024];
    while (read == is.read(bytes)) {
        os.write(bytes, 0, read);
    }
    os.close();
    is.close();
} catch (IOException ex) {
    // Exception handling
}

但是,它的结尾是:

runtimeError: message=[No node attached to this object] sourceName=[http://pagead2.googlesyndication.com/pagead/osd.js] line=[7] lineSource=[null] lineOffset=[0]

创建的文件大小为0。必须有一种方法可以获取附加的真实文件?!

先感谢您


问题答案:

以防万一其他人想知道:您需要使用AttachmentHandler。

            ScriptResult result = page2.executeJavaScript(buttonJavaScript);
            webClient.waitForBackgroundJavaScript(1000);

            if( attachments.size() > 0 )
            {
                Attachment attachment = attachments.get(0);

                Page attachedPage = attachment.getPage();
                WebResponse attachmentResponse = attachedPage.getWebResponse();

                String content = attachmentResponse.getContentAsString();

                ... write(content); 
            }


 类似资料:
  • 我需要使用htmlUnit webDriver在不同页面中下载不同的文件。我在页面上循环,对于每个页面,我都单击输入字段以触发下载。对于第一次下载,我单击HtmlInputElement(提交按钮),它会将文件还给我。之后,HtmlPage变成了未预期的页面。检查UnexcpetedPage中的Web响应,我仍然发现文件已经下载。如何解决? 代码:[……]

  • 问题内容: 我正在尝试在www.meetme.com上发送消息,但不知道该怎么做。我可以在评论区域中键入消息,但是单击“发送”按钮不会执行任何操作。我究竟做错了什么?当我登录并按登录按钮时,页面确实发生了变化,一切都很好。有人有任何想法或线索吗? 问题答案: 如果不了解正在访问的网页,就无法在禁用JavaScript的情况下执行AJAX请求。如果更改未成功,则必须继续进行调试,但请确保已启用Jav

  • 问题内容: 我刚开始使用Flask / Python。我想要实现的是在HTML中有一个下载按钮,它调用以下函数: 不完整的Flask代码为: 我面临的问题是我找不到下载此csv文件或将其作为JSON字符串返回的方法,因此可以使用Javascript下载。知道如何将其作为JSON发送或通过Flask本身下载吗?最好的方法是什么? 问题答案: 这是一种不使用Javascript下载CSV文件的方法:

  • 我目前正在做一个个人投资组合,我试图制作一个按钮,如果你点击它,应该下载一份简历。 代码 让用户下载该文件。 我在REACTJS中工作,创建react应用程序

  • 这是疯狂的,但我不知道如何做到这一点,因为如何常见的词,很难找到我需要的搜索引擎。我想这应该是一个很容易回答的问题。 我想要一个简单的文件下载,这将做同样的如下: 但我想使用HTML按钮,例如: 同样,是否可以通过JavaScript触发一个简单的下载? 我绝对不是在寻找一种方法来创建一个看起来像按钮的锚,使用任何后端脚本,或者混乱服务器头或mime类型。

  • 问题内容: 我在这里指定了非常相似的要求。 我需要让用户的浏览器在以下情况下手动开始下载 但是我无法使用该方法,因为它将当前页面内容替换为您尝试下载的文件。 相反,我想在新窗口/选项卡中打开下载。这怎么可能? 问题答案: 使用不可见的: 要强制浏览器下载本来可以呈现的文件(例如HTML或文本文件),则需要服务器将文件的MIME类型设置为无意义的值,例如或另外,用于任意二进制数据。 如果只想在新标签