2014年3月20日木曜日

フレーム分割されたページを操作する : ExcelからFirefox自動制御(16)

【はじめに】

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
    driver.Start "firefox", "http://homepage3.nifty.com/abe-hiroshi/"
    driver.setImplicitWait 1000000
    driver.get "/"
   
    Dim frameUrl: frameUrl = driver.findElementsByTagName("frame").Item(1).getAttribute("src")
    driver.get frameUrl
End Sub

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

みんなが大好きな阿部寛さんのホームページを開き、フレーム分割された右側のページを開きます。

アクセスが集中するのかホームページが重いことがあるので、setImplicitWaitメソッドで、暗黙の待機時間を多めに設定しています。

findElementsByTagNameメソッドで、frameタグをすべて取得し、目的の要素(WebElementクラスのインスタンス)を取得した後、getAttributeメソッドで、src属性の値(フレーム右側のURL)を取得しています。

あとは、Getメソッドで取得したURLを開けば、通常通り操作ができます。