2011-08-26 3 views
1

현재 HtmlUnit을 사용 중입니다.HtmlUnit, 2 개의 양식을 얻으려고 시도 할 때 두 번째 양식에서 예외가 발생합니다.

첫 번째 로그인 페이지에 아무 문제없이 성공적으로 로그인하면 다음 페이지로 이동하여 링크를 클릭하면 "MyDetails"페이지가 표시됩니다.

"MyDetails"페이지를 가져온 후 첫 번째 로그인 양식을받는 것과 같은 방식으로 가져오고 싶습니다.

왜 양식을 가져 오려면 암호를 변경하고 필드가 양식에 있어야합니다.

다음 두번째 형태를 얻으려고 노력 메신저, 저에게 제공 예외 :

com.gargoylesoftware.htmlunit.ElementNotFoundException :가 elementName = [형태] 여기서 attributeName = [이름]의 AttributeValue = 형식 2]

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

주 :

코드의 라인에서 예외를 제공하는 제 폼 이름 "에 form1"& 번째 폼 이름 "형식 2"이다.

HtmlUnit에 문제가 있습니까?

코드 : 모든

try { 
    WebClient webclient = new WebClient(BrowserVersion.FIREFOX_3_6); 
    HtmlPage page1 = webclient.getPage("http://www.highveld.mobi/pages/clubvip/login.aspx"); 

    HtmlForm form = page1.getFormByName("form1"); 
    HtmlSubmitInput buttonLogin = form.getInputByName("cmdLogin"); 

    HtmlTextInput cellLogin = form.getInputByName("txtCellNumber"); 
    HtmlPasswordInput passLogin = form.getInputByName("txtLoginPassword"); 
    cellLogin.setValueAttribute(change); 
    passLogin.setValueAttribute(oldPass); 

    HtmlPage page2 = buttonLogin.click(); 

    HtmlAnchor link = page2.getAnchorByHref("updateprofile.aspx"); 
    HtmlPage page3 = link.click(); 

    System.out.println(page3.getUrl()); 
    HtmlForm form2 = page3.getFormByName("form2"); 


    HtmlPasswordInput pass = form2.getInputByName("txtPassword"); 
    HtmlPasswordInput passConfirm = form2.getInputByName("txtConfirmPassword"); 
    HtmlSubmitInput button = form2.getInputByName("cmdUpdate"); 

    pass.setValueAttribute(newPass); 
    passConfirm.setValueAttribute(newPass); 

    HtmlPage page4 = button.click(); 
} 

답변

2

먼저, 경우 HtmlUnit과 2.9이 이전 버전을 사용하는 업데이트하십시오. 이것으로

System.out.println(page3.getUrl()); 
HtmlForm form2 = page3.getFormByName("form2"); 

을 :

System.out.println(page3.getUrl()); 
System.out.println(page3.asXml()); 
HtmlForm form2 = page3.getFormByName("form2"); 

을 내가 그대로 거기 안 확신하는의 Form2를 요소의 실존을 확인 둘째, 이것으로이 교체 ElementNotFoundException를 슬로우합니다.

일반적으로 getFormByName 대신 XPath를 사용합니다. 시도해 볼 수도 있습니다.

희망이 도움이됩니다.

+0

LOL OMS! 보려는 페이지에 오류가 있습니다. 제출 한 정보를 확인하거나 나중에 다시 시도하십시오. 휴대 전화 번호가 잘못되었습니다. 궁금하지 않습니다! 내가 세포 번호를 데이터베이스에 추가하면, 0 infront가 차단됩니다! 감사! – Foxticity

관련 문제