2016-07-06 4 views
3

私はチェックボックスやラジオボタンを持つHTMLフォームを記入することができます代替。アンドロイドのHtmlUnitの代替手段ですか?

私は、ユーザーの入力を求めてそのデータをHTMLフォームのWebサイトに送信し、入力してフォームを送信し、次の結果ページを返します。

私はすでに(私は以下のことのためのJavaコードを掲載している)htmlフォームにデータを送信し、日食にHtmlUnitライブラリを使用してページを取得するために管理。私は私のAndroidのプロジェクトにそのコードをコピーしたとき

しかし、私はAndroidがHtmlUnitライブラリをサポートしていないことが分かりました。アンドロイドのためHtmlUnitするための別の代替は

ありますか?代替は、HTMLフォームにテキスト、チェックボックス、ラジオボタンに記入することができ、送信ボタン

HTMLフォームのコードをクリックしてください。

<form method="post" action="https://www.xxxxx.com/cgi-bin/xxxxxx.cgi"> 


<p><em>Person:</em> 
<input size="18" name="name"><br> 
<input type="radio" name="login" value="no" checked="">Name <input  type="radio" name="login" value="yes">Username</p> 

<p><em>Title:</em> 
<input size="18" name="title"></p> 

<p><em>Department:</em> 
<input size="18" name="department"></p> 

<p><em>Groups to Search:</em><br> 
<input type="checkbox" name="get_student" value="yes" checked=""> Students<br> 
<input type="checkbox" name="get_alum" value="yes" checked=""> Alumni<br> 

<input type="checkbox" name="get_staff" value="yes" checked=""> Staff<br> 
<input type="checkbox" name="get_faculty" value="yes" checked=""> Faculty</p> 

<p><input type="submit" value="Search"></p> 
</form> 

HtmlUnit Javaコード:

public static String submittingForm() throws Exception { 


    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38); 
    webClient.getOptions().setJavaScriptEnabled(false); 
    webClient.getOptions().setThrowExceptionOnScriptError(false); 
    webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 

    WebRequest request = new WebRequest(new URL("https://www.xxxxx.com/")); 

    // Get the first page 
    HtmlPage page1 = webClient.getPage(request); 

    System.out.println("PULLING LINKS/ LOADING:"); 

    // Get the form that we are dealing with and within that form, 
    // find the submit button and the field that we want to change. 
    List<HtmlForm> listform = page1.getForms(); 
    HtmlForm form = listform.get(0); 


    HtmlElement Name = page1.getElementByName("name"); 
    Name.click(); 
    Name.type("Adonay"); 
    HtmlElement nameRadio = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='radio' and @value='no']"); 
    HtmlElement userRadio = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='radio' and @value='yes']"); 
    /* userRadio.click(); click when username wanted*/ 
    HtmlElement Title = page1.getElementByName("title"); 
    Title.click(); 
    Title.type(""); 
    HtmlElement Department = page1.getElementByName("department"); 
    Department.click(); 
    Department.type(""); 
    HtmlElement studentBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_student']"); 
    studentBox.click(); 
    //add clicker here 
    HtmlElement alumniBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_alum']"); 
    alumniBox.click(); 
    //add clicker here 
    HtmlElement staffBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_staff']"); 
    staffBox.click(); 
    //add clicker here 
    HtmlElement facultyBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_faculty']"); 
    facultyBox.click(); 
    //add clicker here 



    HtmlElement button = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='submit' and @value='Search']"); 
    // Change the value of the text field 

    // Now submit the form by clicking the button and get back the second page. 
    HtmlPage page2 = button.click(); 
    webClient.waitForBackgroundJavaScript(200); 
    return(page2.asXml()); 
} 
+0

'代替は、HTMLフォームにテキスト、チェックボックス、ラジオボタンを記入して提出するbutton'をクリックすることができるはずです。いいえ、HttpUrlConnectionを使用してWebサーバー(アクションURL)に値を送信してください。フォームに入力されている情報が分かるので、ページを最初に要求する必要はありません。 – greenapps

+0

私はそれをどのように達成することができるかさらに説明できますか? Imは本当に新しいアンドロイド(実際にプログラミング全体 - 私はちょうど私の最初のCSコースを取った)。 @greenapps – adonayresom

+0

実際に@greenapps私は方法を見つけました。ありがとう。私はあなたが言ったことを考え、オンラインで掘り起こし始めました。しかし、別の質問に答えるようにしてください。私は以下の質問を投稿した。 – adonayresom

答えて

1

ガイズ私は別の方法を見つけました。私はサーバーのアドレスを知っているので、私はDataOutputStreamを使ってデータを直接ポストしようとしました。あなたは私は、Javaを介してそれらにアクセスするためにHTML要素の名前を使用しています見ることができるように

public String searchDirectory() throws IOException { 
    URL url = new URL("https://www.xxxxx.com/xxxxx/xxxxx.cgi"); 
    URLConnection con = url.openConnection(); 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setUseCaches(false); 
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

    DataOutputStream printout = new DataOutputStream (con.getOutputStream()); 

    String parameters =("name=" + URLEncoder.encode("DATA HERE", "UTF-8")); 
    printout.writeBytes (parameters); 
    printout.flush(); 
    printout.close(); 
     /*InputStream inputStream = getApplicationContext().getResources().getAssets().open("White Pages Query Results.html"); 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); 
     */ 
    DataInputStream input = new DataInputStream (con.getInputStream()); 
    String line; 
    String htmlCode = ""; 
    while((line = input.readLine()) != null) { 
     htmlCode += line; 
    } 
    return htmlCode; 
} 

:以下のコードを見てください。しかし、あなたはどのように私は自分の名前を使用せずに、それらを別々に/アクセス埋めることができ、ラジオボタンは、同じ名前を持つ元の記事にHTMLフォームのコードから見ることができるように?

+0

同じ名前= "ログイン"という意味ですか?両方でそれらを埋めるわけではありません。あなたは何も記入しない。ポストパラメータのログインの値を送信するだけです。 &login = noまたは&login = yesと似ています。 – greenapps

+0

ありがとう@greenappsすべてがうまくいった! – adonayresom

+1

この回答を広告している一連の質問への回答は、コミュニティによってフラグが立てられ、削除されました。私たちは、回答が質問された質問を直接対象にし、複数の場所で回答が重複するのではなく、重複した質問がそのようにマークされるようにします。 –