2015-09-24 30 views
0

我正在嘗試使用HTMLUnit在Java中使用Java瀏覽網站。當我在java代碼的底部請求最終的println時,控制檯只返回部分代碼而不是整個網頁的html ...我已經嘗試添加等待JavaScript和其他常見的東西,比如Xpath ......任何人都可以幫助?點擊一個帶有HTMLUnit的按鈕,只返回部分代碼

這裏是我的代碼:

public static HtmlPage submittingForm(String user, String pssw) throws Exception {    java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); 


    try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) { 

     webClient.getOptions().setThrowExceptionOnScriptError(false); 

     final HtmlPage page1 = webClient.getPage("someUrl"); 

     final HtmlForm form1 = page1.getFormByName("someForm"); 

     final HtmlTextInput username = form1.getInputByName("inputName"); 

     username.setValueAttribute(user);   

     final HtmlPasswordInput password = form1.getInputByName("someName"); 
     password.setValueAttribute(pssw); 

     final HtmlPage page2 = (HtmlPage) form1.getInputByValue(" Login ").click(); 

     HtmlAnchor loginLink = page2.getAnchorByHref("anyHref"); 
     HtmlPage page3 = loginLink.click(); 

     final HtmlForm form2 = page3.getFormByName("formName"); 

     lastPage = (HtmlPage) form2.getInputByValue("buttonName").click(); 

     System.out.println(lastPage.asXml()); 

     } 

    return lastPage; 
} 

回答

0

以我的經驗,很可能你只需要等待Ajax來完成加載網站的有用部分。

我使用類似這樣的方法: //等待ajax不超過這個秒數 private static final int AJAX_MAX_TRIES_SECONDS = 30;

public static void waitForAjaxUntilTextAppearsInXmlSource(// 
     @Nonnull final DomNode element, // 
     @Nonnull final String text, // 
     @Nonnull final String waitingLogMessage) throws WaitingForAjaxTimeoutException { 
    LOGGER.debug("Waiting for ajax call to complete ... [" + waitingLogMessage + "]"); 
    final StringBuilder waitingdots = new StringBuilder(" "); 
    for (int i = 0; i < AJAX_MAX_TRIES_SECONDS; i++) { 
     if (element.asXml().contains(text)) { 
      waitingdots.append(" ajax has finished [").append(text).append(" appeared in xml]"); 
      LOGGER.debug(" " + waitingdots); 
      return; 
     } 
     waitingdots.append('.'); 
     wait(element); 
    } 
    LOGGER.warn(waitingdots.append(" ajax timeout [Text '" + text + "' did not appear in XML-source]").toString()); 
    LOGGER.warn("Page source:\n" + element.asXml()); 
    throw new WaitingForAjaxTimeoutException(); 
}