0

私はJavaが初めてで、WebスクレイピングとWebページのやり取りを行うためにさまざまなJavaアプリケーションを作成する必要があります。

Selenium を使い始めましたが、ブラウザと直接対話するため、実用的ではありません。

次のタスクを実行する必要があります: 1. 特定の URL に移動します。 2. 入力フィールドに郵便番号を入力します。 3. [送信] ボタンをクリックします。 4. 特定の div タグまたは再クエリ ページからの結果を解析して保存します。

HTMLUnit と Eclipse を使用しています。Web ページにアクセスし、フォームを参照してから入力名を参照することで、入力に郵便番号を入力できます。ただし、送信ボタンをクリックしようとすると、ElementNotFoundException エラーが発生します。

ページに送信ボタンを実装する方法のサンプルを次に示します。

type="submit" value="submit" name="submit">郵便番号を入力してください

私のコードは次のようになります。

package htmlunittest;

import java.io.IOException;
import java.net.URL;
import junit.framework.TestCase;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.RefreshHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlImage;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

public class htmlunittest extends TestCase{

@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception 
{

    final WebClient webClient = new WebClient();            
    final HtmlPage startPage = webClient.getPage("http://www.testpage.com");

    final HtmlForm form = (HtmlForm) startPage.getForms().get(2);

 final HtmlTextInput textField = form.getInputByName("address");
  textField.setValueAttribute("my post code");

//throws ElementNotFoundException
  final HtmlSubmitInput button = form.getInputByName("submit");

// Now submit the form by clicking the button and get back the second page.
final HtmlPage page2 = button.click();
System.out.println(page2.getHtmlElementById("mainContent"));

webClient.closeAllWindows();

}
}

HTMLUNIT経由で送信ボタンをクリックする方法について、誰かが私を正しい方向に向けることができますか?

ありがとう

4

1 に答える 1

0

フェッチしようとしているページ全体がないと、なぜそれが機能しないのかを見つけるのは少し困難です。

で正しいフォームを取得していないに違いありませんが、.get(2)通常、フォームをそのように取得するのは悪い考えです。なぜなら、ターゲット ページがそのソース コードをわずかに変更して、その上にフォームを追加するだけである場合、スクレーパーはそうしないからです。インデックスが異なるため、もう一度作業します。

于 2013-04-18T13:49:26.537 に答える