2


2

ブラウザーと対話する単純なWebクローラーの作成(Java)

次のことを行う自動プロセス(できればJavaを使用)を作成する必要があります。

  1. 特定のURLでブラウザーを開きます。

  2. 指定されたユーザー名とパスワードを使用してログインします。

  3. ページ上のいずれかのリンクをたどります。

  4. ブラウザを更新します。

  5. ログアウト。

これは基本的に、分析のために統計を収集するために行われます。 ユーザーがリンクをたどるたびに、この特定のユーザーのデータの束が生成され、データベースに保存されます。 私がする必要があるのは、約10人の偽のユーザーを使用して、5〜15分ごとにページをpingすることです。

簡単な方法を教えてください。 無限のログイン、リフレッシュ、ログアウトの手動プロセスに代わるものが必要です…​

4 Answer


5


Seleniumを試してください。


1


必要に応じてhttp://htmlunit.sourceforge.net/[HtmlUnit]を使用します

  1. FAST

  2. 簡単

JavaベースのWebインタラクション/クロール。

*例:*ここには、大量の出力とロードされたページのすべてのIMG要素にアクセスする例を示す簡単なコードがあります。

public class HtmlUnitTest {
  public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage("http://www.google.com");
    System.out.println(page.getTitleText());

    for (HtmlElement node : page.getHtmlElementDescendants()) {
      if (node.getTagName().toUpperCase().equals("IMG")) {
        System.out.println("NAME: " + node.getTagName());
        System.out.println("WIDTH:" + node.getAttribute("width"));
        System.out.println("HEIGHT:" + node.getAttribute("height"));
        System.out.println("TEXT: " + node.asText());
        System.out.println("XMl: " + node.asXml());
      }
    }
  }
}

*例#2 *名前付き入力フィールドへのアクセスとデータの入力/クリック:

final HtmlPage page = webClient.getPage("http://www.google.com");

HtmlElement inputField = page.getElementByName("q");
inputField.type("Example input");

HtmlElement btnG = page.getElementByName("btnG");
Page secondPage = btnG.click();

if (secondPage instanceof HtmlPage) {
  System.out.println(page.getTitleText());
  System.out.println(((HtmlPage)secondPage).getTitleText());
}

注意: Pageオブジェクトでpage.refresh()を使用できます。


1


Javaではなく、Javascriptです。 次のようなことができます。

window.location = ""
document.getElementById("username").value = "";
document.getElementById("password").value = "";

document.getElementById("login_box_button").click();

…​

etc

このような構造を使用すると、1〜3を簡単にカバーできます。 ページを更新するためのforループをいくつか挿入すれば完了です。


0


Jakarta JMeterを使用できます