2014年12月3日水曜日

SeleniumVBA(3): 要素の指定方法

【はじめに】

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

前回までに、基本的な制御方法を解説したので、今回から、Selenium特有の機能などについて解説したいと思います。今までの解説記事については下記をご参照ください。

動作対象

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
 
    driver.findElementByName("value")
    driver.findElementById("value")
    driver.findElementByCssSelector("value")
    driver.findElementByXPath("value")
    driver.findElementByLinkText("value")
End Sub

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

SeleniumVBA(といよりSelenium)では、要素の指定方法には大きく分けて5種類の方法があります。

findElementByName

指定したNameの値を持つ要素を取得します。
IEでDOM操作で言うと、getElementsByName に相当する機能になります。なおgetElementsByName と異なり、取得する要素は1つです。指定した名前の要素すべてを取得したい場合は、 findElementsByName を使用してください。

findElementById

指定したIdの値を持つ要素を取得します。
IEでDOM操作で言うと、getElementById に相当する機能になります。

findElementByCssSelector

文字列で指定したCSSセレクタを用いて要素を取得します。
Firefoxを利用している場合は、「一意のセレクタをコピー」でコピーできるCSSセレクタを貼りつけるだけでOKです。

driver.findElementByXPath

文字列で指定したXPathを用いて要素を取得します。
ブラウザがXPathをサポートしていない場合(InternetExplorerの場合)、Seleniumが独自のXPath解析エンジンを用いて、要素を取得します。

XPathの書き方は、XPath の例 などを参考にしてください。

XPath自体は、W3Cによる標準規格でJIS規格にもなっていますが、個人的には、CSSセレクタに比べ、簡単なスクリプトを書くには大げさに感じられ、あまり好きではないです。(余談)

driver.findElementByLinkText

指定した文字列のリンクを取得します。
なお、指定する文字列は完全一致している必要があります。一致するリンクが複数ある場合、1つ目のものが取得されます。