2013-12-18 2 views
-1

Я хочу запустить функцию onclick javascript, в приведенном ниже html-коде, с java и HtmlUnit и получить информацию, которую создают скрипты.выполнить onclick с помощью HtmlUnit и получить результат

<td width="13"><a class="img_attachfile16" alt="show files" title="show files" rel="Hide files" href="#" onclick="return (DocumentFiles.ShowHideFiles(12, 345234, 0, this))"></a></td> 

Какую функцию ShowHideFiles сделать то, что при нажатии на ссылку она покажет вам имена файлов (в ячейке таблицы), которые могут быть загружены и их URL. Я хочу получить эту информацию с помощью java и HtmlUnit, но я не могу заставить ее работать. Это то, что я пробовал:

webClient = new WebClient(BrowserVersion.FIREFOX_17); 
HtmlPage page = webClient.getPage(url); 
List tables = page3.getByXPath("//table"); 
//Get the right table 
HtmlTable table = (HtmlTable) tables.get(11); 
List<HtmlTableCell> cells = tableRow.getCells(); 
//Get the right cell and its childelement(where the onclick function is). 
HtmlElement element = cells.get(10).getFirstElementChild(); 

String clickAttr = element.getOnClickAttribute(); 
ScriptResult scriptResult = page.executeJavaScript(clickAttr); 

//Get new page 
HtmlPage page2 = (HtmlPage) scriptResult.getNewPage(); 
System.out.println(page2.asXml()); 

Новая страница я получаю такое же, как и раньше, а это означает, что я не вижу дополнительную информацию я хочу. Я также попытался выполнить щелчок из HtmlElement, как это:

//Same as before but now make HtmlAnchor object from right cell 
HtmlAnchor anchor = (HtmlAnchor) cells.get(10).getFirstElementChild(); 
page2 = (HtmlPage) anchor.click(); 
System.out.println(page2.asXml()); 

Как и предыдущая попробовать новую страницу я получаю такое же, как и раньше, без дополнительной информации.

Я был бы очень благодарен за предложения относительно того, как это решить.

С наилучшими пожеланиями /Tomas


Я добавил эти строки:

webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
//This one after getNewPage() 
webClient.waitForBackgroundJavaScript(1000); 

Нет изменений в новой найденной страницы в настоящее время либо. Как получить журналы ошибок? У меня нет никаких исключений. Что еще я могу сделать?

ответ

0

Должен предположить, что вы выполняете запрос AJAX с этим кодом. Если это так, то, скорее всего, проблема в том, что вы не дожидаетесь обновления страницы.

Скорее всего, этот вопрос поможет:

Get the changed HTML content after it's updated by Javascript? (htmlunit)

Кроме того, убедитесь что вы не получаете какие-либо ошибки в журнале.

+1

Теперь я попытался включить это в свой код: – Tom

0

Как только попробуйте это, он может работать.

List<HtmlAnchor> anchors = new ArrayList<HtmlAnchor>(); 
      anchors = homePage.getAnchors(); 
      HtmlPage tempPage = null; 
      for (int i = 0; i < anchors.size(); i++) { 
       tempPage = anchors.get(i).click(); 
       String secondLink = homePage.getUrl().toString(); 
       System.out.println(secondLink); 
       client.waitForBackgroundJavaScript(10000); 
       client.waitForBackgroundJavaScriptStartingBefore(10000); 
      } 
Смежные вопросы