2011-08-26 21 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

首先,請升級到2.9的HtmlUnit如果你使用的是舊版本。有了這個

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。

我通常使用XPath而不是getFormByName,你也可以嘗試一下。

希望這會有所幫助!

+0

LOL OMS! 您嘗試查看的網頁存在錯誤,請檢查您提交的信息或稍後重試。 手機號碼無效。怪不得!當我將這些單元格號碼添加到數據庫時,0 infront會被截斷!謝謝! – Foxticity

相關問題