2014年3月8日土曜日

テキストボックスに文字を入力する : ExcelからFirefox自動制御(4)

【はじめに】

SeleniumVBAを用いて、VBA (ExcelやWordなど) からFirefoxを自動制御する方法のサンプルコードを掲載しています。

動作対象は、SeleniumVBAの仕様に準じ、Microsoft Office2003 - 2013、Firefox Ver.8以降です。
(手元では、SeleniumVBA  v1.0.18.0 に、Windows7 + Firefox27.0.1, Windows8.1 + Firefox27.0.1の組み合わせで動作確認しています。)

サンプルコードは、SeleniumWrapper Type Library を参照設定すれば、コピー&ペーストで動作するように作成しています。



【サンプルコード】

Sub StartFirefox()
    Dim driver As New SeleniumWrapper.WebDriver
    Call driver.start("firefox", "http://www.google.com/")
    driver.get ("/")
    driver.findElementByName("q").SendKeys ("ぐるぐる")
End Sub

【サンプルコードの解説】

http://www.google.com/ を表示し、検索ボックスに「ぐるぐる」と入力します。

第3回(指定したURLを開く)のコードで、http://www.google.com/ を表示した後
findElementByNameメソッドで "q"という値のName属性を持つ要素(HTMLタグ)を取得し、
SendKeysメソッドで、"ぐるぐる"という文字を入力しています。

findElementByNameメソッドは、第1引数で指定した値のName属性を持つ要素(WebElementクラスのインスタンス)を取得し、返します。

説明は省略しますが、オプションで第2引数に、タイムアウトと判定するまでの時間を指定可能です。

WebElementクラスのSendKeysメソッドは、第1引数に与えられた文字列を入力します。

VBAでIEの自動制御をされたことのある方向けのTips

SendKeysメソッドは、DOM操作による文字入力ではなく、キーボードの入力をエミュレーションするものです。(詳しくは確認していませんが、同名のWin32APIをラップしたものと思われます。)

WebElementクラスにはTextプロパティが存在しますが、値の取得のみ可能です。(値の入力には使えません。)

余談

テキストボックスへの入力方法としては、SeleniumRC(Selenium1)に対応していると思われるtypeメソッドもあります。