2011-04-27 79 views
2

我正在嘗試使用用戶提供的登錄連接到站點的應用程序。我沒有任何與Java網站交互的經驗,所以我搜索了一些,發現hmtlunit符合我的需求。Java HtmlUnit form.getInputByValue(「立即登錄!」)。click();

但是,試圖點擊登錄表單提交按鈕時,我遇到了一個錯誤:

public static boolean attempt_login(String username, String password) throws ElementNotFoundException, IOException { 
     WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6); 
     webClient.setJavaScriptEnabled(false); 
     webClient.setThrowExceptionOnScriptError(false); 
     webClient.setRefreshHandler(new RefreshHandler() { 
      public void handleRefresh(Page page, URL url, int arg) throws IOException { 
       System.out.println("handleRefresh"); 
      } 
     }); 

     HtmlPage page = (HtmlPage) webClient.getPage(Config.LOGIN_PAGE); 
     List<HtmlForm> forms = page.getForms(); 
     HtmlForm form = null; 
     for(HtmlForm f : forms){ 
      if(f.getId().equals("login_form")){ 
       form = f; 
      } 
     } 
     if(form == null){ 
      throw new NullPointerException("Could not find form!"); 
     } 
     form.getInputByName("username").setValueAttribute(username); 
     form.getInputByName("password").setValueAttribute(password); 

     page = (HtmlPage) form.getInputByValue("Login Now!").click(); 

     System.out.println(page.asText()); 
     return false;} 

不知怎的,它未能找到提交按鈕登錄

com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[value] attributeValue=[Login Now!] 
at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByValue(HtmlForm.java:737) 
at domain.Helper.attempt_login(Helper.java:41) 
at TesterStartUp.main(TesterStartUp.java:15) 

HTML源代碼:

<button type="submit" value="Login Now!" onmouseover="this.style.backgroundPosition='bottom';" onmouseout="this.style.backgroundPosition='top';" onclick="return SetFocus();">Login Now!</button> 

當我搜索一個解決方案時,我發現了一些關於禁用j avascript會有所幫助。所以我告訴webclient禁用它(webClient.setJavaScriptEnabled(false);)但仍然有例外。

起初,我試圖選擇表單(「login_form」)時遇到了同樣的問題,但是有一種方法可以獲取所有表單的列表,然後查看是否有人匹配列表。我找不到提交按鈕的方法,所以我希望別人知道這個問題的解決方案。

由於提前, 巨魔爵士

回答

1

化的HtmlUnit getInputByValue() method<form>操作只會返回HtmlInput類型,唯一的輸入按鈕類型 - HtmlButtonInput - 代表<input type="button">和NOT <button>。您將需要更改HTML或使用不同的HtmlUnit方法調用。

+0

這不是我的webspage,所以我不能改變的HTML。我應該使用哪種方法?因爲提交按鈕中唯一的'唯一'項是值 – 2011-04-28 19:09:59

0

我有同類問題,我解決我自己的:

當您嘗試使用HTML單元首先檢查是否登錄框出現的onclick使用jQuery或沒有登錄。如果登錄框/ DIV正出現後點擊一個按鈕,那麼你需要刷新頁面(Web客戶端)訪問新的輸入元素

HtmlPage page = webClient.getPage("https://www.yourwebsite.com/#"); 
HtmlAnchor link=page.getElementByName("link"); 
link.click(); 
page.refresh(); 

如果您的網站上有一個按鈕,而不是錨鏈接改變它的HTML按鈕,刷新後,你可以找到元素。

希望這將有助於解決您的問題