2017-01-14 9 views
0

JavaでHtmlUnitを使用してWebサイトにログインする簡単なタスクを作成したいとします。私が検索したすべてのコンテンツから、通常、人々は検索する要素名またはIDを持っています。しかし、私の特別なケースでは、それはありません。HtmlUnitを使用したログインとパスワードのヘルプ

<input type="email" class="js-email form-control input-lg" placeholder="Enter email"> 
<input type="password" class="js-password form-control input-lg" placeholder="Enter password"> 

<button type="submit" class="js-login btn btn-success btn-lg" style="width: 140px" disabled=""> 
<span class="vs-login-text">Log In</span><i class="vs-spinner fa fa-refresh fa-spin"></i> 
</button> 

対応するXPathは次のとおりです:=

//*[@id="login"]/div[3]/form/div[2]/input[2] 

これは、Javaコードである私は、ウェブサイトからのユーザー名/パスワード]フィールドをクリックして、(クローム)検査ヒットすると、これは私が得るものです私はオンライン参照実装:

import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlElement; 
import com.gargoylesoftware.htmlunit.html.HtmlOption; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.html.HtmlSelect; 
import com.gargoylesoftware.htmlunit.html.*; 
import java.util.*; 
public class V1 { 

public static void main(String[] args) throws Exception{ 

    final WebClient webClient = new WebClient(); 
    final HtmlPage page = webClient.getPage("Site address"); 

    //Trying something here 
    final List<?> divs = page.getElementsByTagName("<input>"); 
    System.out.println("It is: " + x); 


    HtmlElement usrname = page.getElementByName("email"); 
    usrname.click(); 
    usrname.type("[email protected]"); 

    HtmlElement psswrd = page.getElementByName("password"); 
    psswrd.click(); 
    psswrd.type("mypassword"); 

    HtmlElement signin = page.getElementByName("submit"); 
    signin.click(); 
    System.out.println(page.getTitleText()); 
    webClient.close();; 
} 

私は要素名/ IDを取得することができませんので、手の中のタスクは上記の作業と要素が見つかりません例外をスローしません、しかし、簡単です。私はタグ(inputと)で要素を印刷しようとしましたが、空の[]が返されました。

どのような変更や追加が必要なのかを誰でもガイドできるので、メールとパスワードの組み合わせを追加してログインできますか?

答えて

0

は彼らのxpathによって要素にアクセスしてください:

HtmlTextInput email = (HtmlTextInput) page.getByXPath("//*[@id='login']/div[3]/form/div[2]/input[2]").get(0); 
email.setValueAttribute("email"); 
HtmlPasswordInput password = (HtmlPasswordInput) page.getByXPath(" //*[@id='login']/div[3]/form/div[2]/input[3]").get(0); 
password.setValueAttribute("password"); 

HtmlButton submitButton = (HtmlButton) page.getByXPath("yourXPath").get(0); 
page = submitButton.click(); 

私は、あなたがあなたのページのHTMLにそれらを再確認する必要があり、これらのXPathが正しいことを確認していません。

+0

最初のコード行でArrayOutOfBoundエラーが発生します。入力[0]、入力[1]を試し、入力[2]を試し、入力[3]を試してみてget(0-2) – hammad2506

0

getElementsByTagName()について タグ名(タグ全体ではない)を使用する必要があります。

final List<?> divs = page.getElementsByTagName("input"); 

ウェブページについてあなたが実際のブラウザでページを開くと、いくつかのjsマジックを行う開始ページが表示されます。しばらくすると、ページはログイン画面に置き換えられます。 HtmlUnitでは多かれ少なかれ同じことをしなければなりません。

final HtmlPage page = webClient.getPage("Site address"); 

初期ページを返します。通常、JavaScriptは非同期を開始します。だからあなたはそれが終わるのを待たなければなりません。また、JavaScriptがページを別のページに置き換えている可能性があります(リダイレクトなど)。現在のページを取得することをお勧めします。 さらに、page.asXML()を使用して、作業しているページのコードをダンプすることができます。

+0

を試してみました。両方とも動作しません – hammad2506

+0

ページは公開されていますか?それを試すことはできますか?どのバージョンのHtmlUnitを使用しますか? – RBRi

+0

これは最新のものです:2.24。ここにウェブページがあります:https://vena.io – hammad2506

関連する問題