2017-02-20 7 views
0

HtmlUnitを使用してログインするにはどうすればよいですか?ログインフォームがjavascriptの場合は、HtmlUnitでウェブサイトにログインしてください

URLは次のとおりです。https://www.jambox.pl/ogladaj

ログインフォームは、私がgetFormByName()を使用してそれを得ることができないのでIDを持っていないようです。

+0

jqueryを使用して$( "。form")を使用すると、フォームオブジェクトが表示されます。 –

+0

Javaのサイトにログインしたい – mati2762

+0

Java関数を呼び出すために使用するJavaアプリケーションがあるので、待ちますか?私は、JavaScriptのランナーを作成してスクリプトをダウンロードするのに手間がかからないと思います。スクリプトをダウンロードして勉強し、Javaで独自のバージョンを作成するのはもっと楽しいと思います。 JavascriptとJavaが接続されていることを間違えないでください。Javascriptは実際のランタイムや開発ではなく、Javaとその構文の一部を共有するためにのみ呼び出されます。 –

答えて

0

あなたはページのすべてのフォームを取得し、いくつかの特定の属性を検索することができますHtmlForm

を取得するためのIDまたは名前を必要としません。

また、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 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の内部に位置しているform.but HTMLページのを取得する方法を知っています。

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(); 
        } 
       } 
      } 
     } 
    } 
} 
関連する問題