HTMLParseとは、HTMLの文法に従って記述された複雑な構造のテキスト文書を解析し、プログラムで扱えるようなデータ構造の集合体に変換するプログラムのことを指します。
Seleniumでは、HTMLのテキストから要素又は属性に付与された値を特定し、操作を行うことで自動化を実現します。
今回の例では、Google Chromeを使用して検証します。
ちなみに接続するサイトはYahoo!にします。
ブラウザが起動されてからの検証を行いますので、ブラウザを起動する方法については、[wiki:
ブラウザ起動 こちら]を参照してください。
特定の要素を指定
Yahooトップページにある「input」の要素を持つデータが8つありますので、それを取得してみます。
取得した後にそれぞれの「input」要素が持つname属性の値を出力します。
//特定の要素を指定
List<WebElement> webElementTagList = chromeDriver.findElements(By.tagName("input"));
for ( WebElement element : webElementTagList){
System.
out.
println(element.
getAttribute("name")); }
}
結果
p
search.x
fr
tid
ei
aq
oq
となります。
2つ目の結果がNullとなっていますが、これは
<input type="submit" id="srchbtn" class="srchbtn" value="検索">
となっており、上記の通りname属性が存在しない為Nullという結果になります。
特定の属性を指定
Yahooトップページにある検索用の入力フォームの要素に含まれる属性にはname="p"という値があります。
従って、入力フォーム用の情報を取得するには、以下のようなコードになります。
WebElement webElement = chromeDriver.findElement(By.name("p"));
自動で入力フォームに値を入れる
上記の属性取得で実施したname="p"を持つ要素に自動的に値を入れてみたいと思います。
入力したい値を反映させるには、sendKeyメソッドを使用します。
WebElement webElement = chromeDriver.findElement(By.name("p"));
webElementName.sendKeys("Google Maps!");
とすると、こんな感じになります。
ちなみに日本語を入れようとすると文字化けするケースがあります。
こんな感じ
WebElement webElement = chromeDriver.findElement(By.name("p"));
webElementName.sendKeys("あいうえお");
こうすればなんとか。。。
WebElement webElementName = chromeDriver.findElement(By.name("p"));
JavascriptExecutor js = (JavascriptExecutor)chromeDriver;
js.executeScript("document.sf1.p.value=arguments[0]", "わっしょいわっしょい");
うーん。なんでsendKeysじゃだめなんだろ。※要検証!
最終更新:2013年10月24日 20:33