当前位置: 首页 > 知识库问答 >
问题:

HtmlUnit:下载文件后获取意外页面

段干祺
2023-03-14

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

代码:[……]

public void test(HtmlPage htmlPage){
    List<?> checkBox = htmlPage.getByXPath("//tbody[@id='TestID:ricerca_report:tb']/tr[child::td[contains(text(),'TEST')]]/td[1]/input[@type='checkbox']");

    for (int j = 0; j < checkBox.size(); j++) {
        HtmlCheckBoxInput checked = (HtmlCheckBoxInput) checkBox.get(j);
        checked.setChecked(true);
    }

    writeResponseHtml(htmlPage, spOp);
    InputStream input = null;
    try{
        HtmlSubmitInput htmlSubmitInput = htmlPage.getElementByName(param.getNameAttribute());
        WebResponse webResponse = htmlSubmitInput.click().getWebResponse();
        extractOriginalFileName(webResponse, spiderInfo.getFileName());
        if( checkAndSaveFileExtension(webResponse) != null ){
            input = webResponse.getContentAsStream();
            downloadFile( input );
            spiderInfo.setFileName("work/output/spider_logs/");
        }else
            spiderInfo.setSpiderState(SpiderStates.DOWNLOAD_ERROR);
    }catch ( Exception e ){
        logger.error("getOperation download exception; " + spOp + "; Exception: " + e);
        spiderInfo.setSpiderState(SpiderStates.DOWNLOAD_ERROR);
        page = null;
    }
    writeResponseHtml(htmlPage, spOp);
    HtmlTableDataCell tableCell = htmlPage.getFirstByXPath(param.getContainsElement2());
    Page p = tableCell.click(); // Here i got the exception
}

[....]

共有1个答案

佟云
2023-03-14

如果有人遇到同样的问题;我使用PageCreator解决了:

PageCreator dpc = new DefaultPageCreator();
HtmlPage detailPage = null;
for (int j = 2 ; j<= 11; j++){ // there are 10 pages
detailPage = (HtmlPage)dpc.createPage(htmlPage.getWebResponse(),webClient.openWindow(htmlPage.getUrl(),"ew Window"));
detailPage = ((HtmlElement)detailPage.getFirstByXPath("MYXPATH")).click();
detailPage = ((HtmlElement)((HtmlPage)detailPage ).getFirstByXPath("MYXPATH2")).click(); // download element
webClient.setCurrentWindow(htmlPage.getEnclosingWindow()); //go back to main window
}// end FOR

其中htmlPage是主页。

 类似资料:
  • 问题内容: 我正在尝试使用HtmlUnit在javascript按钮后面下载附件。执行其他任务效果很好(例如,导航,登录)。我检查了附件单元测试,但没有帮助我。 但是,它的结尾是: 创建的文件大小为0。必须有一种方法可以获取附加的真实文件?! 先感谢您 问题答案: 以防万一其他人想知道:您需要使用AttachmentHandler。

  • 首先我想提一下,我是HtmlUnit的新手。我试图获取一个网页,然后解析其内容。网址:https://secure.fattal.co.il/BE_Results.aspx?Lang=heb 但是我最终得到了下面的javascript内容: 注意:我开始使用jsoup解析器获取URL,但是响应是相同的javascript。 在搜索了javascript内容之后,我意识到我应该使用像HtmlUnit

  • cmf_get_file_download_url($file, $expires = 3600) 功能 获取文件下载链接 参数 $file: string 文件路径,数据库里保存的相对路径 $expires: int 过期时间,单位 s 返回 string 文件链接

  • X2.2.0新增 sp_get_file_download_url($file,$expires=3600) 功能: 获取文件下载链接 参数: $file: 数据库保存的文件路径 $expires:文件过期时间(七牛) 返回: 类型string,文件下载链接 使用: $url = sp_get_file_download_url('portal/23232.png');

  • cmf_get_file_download_url($file, $expires = 3600) 功能 获取文件下载链接 参数 $file: string 文件路径,数据库里保存的相对路径 $expires: int 过期时间,单位 s 返回 string 文件链接

  • 问题内容: 基本上,我想确定是否应该使用AJAX下载文件,具体取决于文件大小。 我猜这个问题也可以表述为:我如何仅获取ajax请求的标头? 编辑 :评论中的ultima-rat0告诉了我两个已经被问到的显然与这个相同的问题。它们非常相似,但是都需要jQuery。我想要一个非jQuery解决方案。 问题答案: 您可以手动获取XHR响应头数据: http://www.w3.org/TR/XMLHttp