2017-02-20 95 views
0

我如何登錄到使用HtmlUnit?登錄網站時使用HtmlUnit當登錄表單是javascript

網址爲:https://www.jambox.pl/ogladaj

登錄表單似乎並不有一個ID,所以我不能用getFormByName()得到它。

+0

使用jquery並使用$(「。form」),你將得到窗體對象。 –

+0

我想以Java登錄該網站 – mati2762

+0

等待,所以你有一個Java應用程序,你想用它來調用一個JavaScript函數?我認爲你的運氣不好,然後創建一個JavaScript跑步者並下載腳本......我想你會有更多的運氣下載腳本並研究它並在Java中創建它自己的版本。不要誤解Javascript和Java會被連接,所以Javascript被稱爲只是因爲它與Java共享某些語法,而不是它的實際運行時或開發。 –

回答

0

你並不需要一個ID或名字得到一個HtmlForm

你可以得到網頁上的所有形式,並尋找一些特定的屬性。

或者你也可以直接使用XPath。

public static void main(String[] args) throws Exception { 
    try (WebClient webClient = new WebClient()) { 
     webClient.getOptions().setUseInsecureSSL(true); 

     HtmlPage page = webClient.getPage("https://www.jambox.pl/ogladaj"); 

     // get the form first 
     for (HtmlForm form : page.getForms()) { 
      System.out.println(form.asXml()); 
      //if this is your form, use it. 
     } 

     // or using XPath with attribute 'action' 
     HtmlForm form2 = page.getFirstByXPath("//form[@action='/widget2']"); 
    } 
} 

然而,似乎HtmlUnit沒有檢索所有的形式,這是我認爲的錯誤。

0

我知道怎麼去的form.but Htmlpage沒有看到第二個形式<form action = "/ widget2 ">

List<HtmlForm> list = new ArrayList<HtmlForm>(); 
list=page.getForms(); 
System.out.println(list.size()); 
HtmlForm form = list.get(0); 
System.out.println(form.asXml()); 

此返回代碼大小

1 

<form action="/ogladaj" accept-charset="UTF-8" method="post" id="search-theme-form"> 
    <div> 
    <div id="search" class="container-inline"> 
     <div class="form-item" id="edit-search-theme-form-1-wrapper"> 
     <input type="text" maxlength="128" name="search_theme_form" id="edit-search-theme-form-1" size="15" value="Szukaj" class="form-text NormalTextBox txtSearch" onfocus="if (this.value == 'Szukaj') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Szukaj';}"/> 
     </div> 
     <input type="submit" name="op" id="edit-submit" value="Szukaj" class="form-submit"/> 
     <input type="hidden" name="form_build_id" id="form-Se_XpWDahQvAp1Wfd2dmZjjwvuAW37ojsRiy8RXlNHk" value="form-Se_XpWDahQvAp1Wfd2dmZjjwvuAW37ojsRiy8RXlNHk"/> 
     <input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form"/> 
    </div> 
    </div> 
</form> 
1

你有興趣在位於一個iframe中的表單。你必須深入挖掘...

public static void main(String[] args) throws Exception { 
    try (WebClient webClient = new WebClient()) { 
     webClient.getOptions().setUseInsecureSSL(true); 

     HtmlPage page = webClient.getPage("https://www.jambox.pl/ogladaj"); 

     HtmlInlineFrame frame = (HtmlInlineFrame) page.getElementById("jambox-frame"); 
     HtmlPage framePage = (HtmlPage) frame.getEnclosedPage(); 

     // the login elements 
     framePage.getHtmlElementById("login-field").type("[email protected]"); 
     framePage.getHtmlElementById("password-field").type("victoria"); 

     for (HtmlForm form : framePage.getForms()) { 
      if (form.getActionAttribute().equals("/widget2/")) { 
       // System.out.println(form.asXml()); 
       for (HtmlElement input : form.getElementsByTagName("input")) { 
        if (input.getAttribute("value").startsWith("Zaloguj")) { 
         // System.out.println(input); 
         input.click(); 
        } 
       } 
      } 
     } 
    } 
}