【问题标题】:HtmlUnit to invoke javascript from href to download a fileHtmlUnit 从 href 调用 javascript 以下载文件
【发布时间】:2013-07-11 09:37:56
【问题描述】:

我试图下载一个似乎必须通过浏览器单击的文件。该站点使用一个表单,其中包含几个指向名为 downloadFile 的 javascript 函数的 href。在这个函数中,名为poslimit的元素是通过document.getElementById获取的:

function downloadFile(actionUrl, formId)
{
    document.getElementById(formId).action=actionUrl;
    document.getElementById(formId).submit();
}

HTML 源码 sn-pt:

<form method="post" name="commandForm" action="position-limits" id="poslimit">
    <div id="content">
        <li><a href="javascript:downloadFile('position-limits?fileName=20130711&positionLimit=CURRENT_POSITION_LIMIT_', 'poslimit');" > July 11, 2013 </a></li>

所以点击上面链接中的链接代码会调用另一个文件中的javascript:

我试过了:

WebClient webClient = new WebClient(BrowserVersion.CHROME_16);
HtmlPage page = webClient.getPage("http://www.theocc.com/webapps/position-limits");
HtmlForm elt = page.getHtmlElementById("poslimit");
elt.setAttribute("action", "position-limits?fileName=20130709&positionLimit=POSITIONLIMITCHANGE_");
InputStream is = elt.click().getWebResponse().getContentAsStream();
int b = 0;
while ((b = is.read()) != -1)
{
    System.out.print((char)b);
}
webClient.closeAllWindows();

也尝试使用 HtmlElement 我也试过了:

WebClient webClient = new WebClient(BrowserVersion.CHROME_16);
HtmlPage page = webClient.getPage("http://www.theocc.com/webapps/position-limits");
ScriptResult sr = page.executeJavaScript("downloadFile('position-limits?fileName=20130709&positionLimit=POSITIONLIMITCHANGE_', 'poslimit'");
InputStream is = sr.getNewPage().getWebResponse().getContentAsStream();
int b = 0;
while ((b = is.read()) != -1)
{
    System.out.print((char)b);
}
webClient.closeAllWindows();

这两个都来自这个和其他板上的示例,但我继续只取回原始页面而不是附加文件。我还想知道是否需要查看历史以获取正确的页面响应,因为我需要的返回窗口/文档可能是前一个。感谢提供完整解释或良好示例文档以及我可以尝试的来源的礼貌链接。

【问题讨论】:

  • HTML 中的日期和我的代码不同,但可以互换,因为每个日期都有几行 href 行

标签: javascript download href attachment htmlunit


【解决方案1】:

所以我认为这可能对其他人有帮助,因为我还没有看到一个有效的例子。

WebClient webClient = new WebClient(BrowserVersion.CHROME_16);
HtmlPage page = webClient.getPage("http://www.theocc.com/webapps/position-limits");
HtmlAnchor anchor = null;
List<HtmlAnchor> anchors = page.getAnchors();
for (int i = 0; i < anchors.size(); ++i)
{
    anchor = anchors.get(i);
    String sAnchor = anchor.asText();
    // This date should come in from args
    if (sAnchor.equals("July 9, 2013"))
        break;
}
// This is not safe, need null check
Page p = anchor.click();
InputStream is = p.getWebResponse().getContentAsStream();
int b = 0;
while ((b = is.read()) != -1)
{
    System.out.print((char)b);
}
webClient.closeAllWindows();

这个问题对我有所帮助,因为我尝试了锚点,它奏效了。 struggling to click on link within htmlunit

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多