質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

4632閲覧

selenium でサイトのAタグを抜き出し、それに順次アクセスするには?

ky_46

総合スコア92

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2015/12/11 07:33

お世話になります。
本来のseleniumの使い方から逸脱するかもしれませんが、サイトを巡回して情報を得る作業を自動化したいです。

javaは殆ど初めてなので、みっともないコードを書いていましたら、お目汚しご容赦ください。

開発環境はWindows7 32bit。
javaはjavac -version で1.8.0_66になります。
eclips4.4.2で、解凍したseleniumをビルド・パスに読み込むところはOKで、Firefoxが立ち上がり、driver.getでGoogleに行き、sendKeysで検索文字を打ってという基本テストがOKでしたので気をよくし、次のようなコードを試験してみました。

java

1import java.util.List; 2 3import org.openqa.selenium.By; 4import org.openqa.selenium.WebDriver; 5import org.openqa.selenium.WebElement; 6import org.openqa.selenium.firefox.FirefoxDriver; 7import org.openqa.selenium.support.ui.ExpectedCondition; 8import org.openqa.selenium.support.ui.ExpectedConditions; 9import org.openqa.selenium.support.ui.WebDriverWait; 10 11import static org.openqa.selenium.support.ui.ExpectedConditions.*; 12 13public class App2 { 14 15 public static void main(String[] args) { 16 // TODO 自動生成されたメソッド・スタブ 17 18 WebDriver driver = new FirefoxDriver(); 19 20 driver.get("http://news.infoseek.co.jp/ranking/"); 21 22 WebElement webElement = driver.findElement(By.id("rankingCmp")); 23 List<WebElement> WebElementList = webElement.findElements(By.tagName("a")); 24 25 for (int i=0 ; i<WebElementList.size() ; i++) { 26 System.out.println(WebElementList.get(i)); 27 28 } 29 30 } 31 32} 33

こちらの希望としては、infoseekのニュースランキングに接続し、ソースを見たところ、ランキング部分は<div id="rankingCmp" という部分に固まっているようですから、このdiv内のAタグをすべてLISTに読み込み、順番に接続するのが希望です。

現在、とりあえずこの中身を表示してみようとしているのですが、出力されるのは
[[[[FirefoxDriver: firefox on WINDOWS (e9fdd279-ee6c-499a-a26e-fa8920059ef2)] -> id: rankingCmp]] -> tag name: a]

という文字列で、aタグのリンク先ではないようです。

何が間違っていて、取り込まれたAタグが表示されないのでしょうか?
逆に間違って、Aタグを取り込んでいないのでしょうか?

よろしくご指導ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最後のforループを以下のように書き換えてみてください(WebElement自身でなくgetText()メソッドの結果を出力するように変更しています)。

java

1for (int i = 0; i < WebElementList.size(); i++) { 2 WebElement elem = WebElementList.get(i); 3 System.out.println("text: " + elem.getText()); 4}

ちゃんと求めているものに近い(が余分なものも含まれている)ことができているのが確認できるのではないでしょうか。


ちなみに、やろうとしていることはおそらく「Webスクレイピング」と呼ばれるものだとおもいます。

それを実現するためには、Seleniumより「HTMLパーサ」に分類されるライブラリを用いるほうが適していると考えます。

上記の用語で検索してみると、より適切な解決法が見つかるかもしれません。

投稿2015/12/11 11:39

編集2015/12/11 11:41
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ky_46

2015/12/13 23:50

ありがとうございます。 ほぼ、希望通りでした。 HTMLパーサーも調べてみます。 私自身、別質問でもあげたのですが、「WEBテスト」としての紹介が多いSeleniumは、webの自動巡回に使っても問題無いのだろうか?と疑問でしたので¨
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問