本文介绍了使用 htmlunit 下载 javascript 按钮后面的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 HtmlUnit 下载位于 javascript 按钮后面的附件.执行其他任务效果很好(例如导航、登录).我检查了附件单元测试,但它没有帮助我.
I am trying to download something an attachment behind a javascript button with HtmlUnit. Performing other tasks works great (eg. navigating, login).I checked out the attachment unit test but it didnt help me.
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.一定有办法拿到附件中的真实文件吗?!
The file created is size 0.There must be a way to get to the real file attached?!
提前致谢
推荐答案
以防万一其他人想知道:您需要使用 AttachmentHandler.
Just in case anyone else is wondering: You need to use the 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 下载 javascript 按钮后面的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!