HtmlUnit для вызова javascript из href для загрузки файла

Я попытался загрузить файл, который, похоже, нужно щелкнуть через браузер. На сайте используется форма, внутри которой есть несколько ссылок на функцию javascript с именем downloadFile. В этой функции элемент с именем poslimit получается с помощью document.getElementById:

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

Фрагмент исходного кода HTML:

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

Также пробовал использовать 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();

Оба они взяты из примеров на этой и других досках, но я продолжаю просто возвращать исходную страницу вместо прикрепленного файла. Мне также интересно, нужно ли мне просматривать историю для правильного ответа страницы, поскольку, возможно, нужное мне окно/документ возврата является предыдущим. Вежливые ссылки на полные объяснения или хорошие примеры документации, а также источник, который я мог бы попробовать, приветствуются.


person TinCupChalice    schedule 12.07.2013    source источник
comment
Даты в HTML и в моем коде разные, но взаимозаменяемые, так как для каждой даты есть несколько строк href   -  person TinCupChalice    schedule 12.07.2013


Ответы (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();

Этот вопрос немного помог мне, когда я попробовал якорь, и он сработал. изо всех сил пытается щелкнуть ссылку в htmlunit

person TinCupChalice    schedule 15.07.2013