2013-07-12 53 views
1

我試圖下載一個似乎必須在瀏覽器中單擊的文件。該網站使用了一個表單,其中有幾個hrefs用於名爲downloadFile的javascript函數。在這個函數中,命名poslimit元件通過的document.getElementById獲得:HtmlUnit從href調用javascript來下載文件

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

的HTML源snippett:

<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> 

上所鏈接的代碼,以便一下上方在href調用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(); 

使用也試過HtmlElem耳鼻喉科 我也試過:

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(); 

這兩個都來自這和其他板的例子,但我仍然只得到原來的頁面返回而不是附加的文件。我也想知道是否需要查看歷史記錄以獲取正確的頁面響應,因爲我需要的返回窗口/文檔可能是以前的。禮貌的鏈接到完整的解釋或良好的exampled文件以及我可以嘗試的來源讚賞。

+0

HTML和我的代碼中的日期不同,但可以互換,因爲每個日期都有幾個href行 – TinCupChalice

回答

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