2011-04-27 2 views
2

사용자가 제공 한 로그인으로 사이트에 연결하는 응용 프로그램을 만들려고합니다. 나는 자바에서 웹 사이트와 상호 작용하는 것에 대한 경험이 없기 때문에 나는 약간의 인터넷 검색을하고 나의 필요에 맞는 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;} 

는 어떻게 든 그것을 찾을 실패 submitButton이

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.setJavaScriptEnabled (false);)을 비활성화 시키라고 말했지만 여전히 예외가있었습니다.

처음에는 양식 ("login_form")을 선택하는 데 동일한 문제가 있었지만 모든 양식의 목록을 가져 와서 목록과 일치하는지 확인할 수있는 방법이있었습니다. 제출 버튼에 대한 해결책을 찾지 못했습니다. 그래서 다른 누군가가이 문제에 대한 해결책을 알고 있기를 바랍니다. 사전에

감사합니다, 선생님 트롤

답변

1

HtmlInput의 형태를 돌려주는 것 <form>에서 작동하는 HtmlUnit과 getInputByValue() method, 유일한 입력 버튼 타입 - HtmlButtonInput은 - <input type="button"> 및 NOT <button> 나타냅니다. HTML을 변경하거나 다른 HtmlUnit 메소드 호출을 사용해야합니다.

+0

해결할 희망, 그래서 HTML을 변경할 수 없습니다. 어떤 방법을 사용해야합니까? 제출 버튼의 유일한 '고유'항목은 값 –

0

내가 나 자신을 해결 문제의 같은 종류가 있었다 :

당신이 로그인 박스가 온 클릭 나타나는 jQuery를 사용하거나하지 않는 경우 먼저 확인 HTML 장치를 사용하여 로그인을 시도

. 로그인 상자/DIV 후 나타나는 다음 버튼을 클릭하는 경우 새로운 입력 요소

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

사이트 대신 HTML 버튼에 대한 고정 링크 변경을하는 버튼이있는 경우에 액세스 할 수있는 페이지 (웹 클라이언트)를 새로 고쳐야합니다, 상쾌하게 한 후에 당신은 성분을 찾아 낼지도 모른다.

은 도움이 내 webspage없는 문제