【まえがき】
現状、VBAでInternetExplorer(IE)を自動制御(自動操作)するという話となると、Microsoft Internet Controlsを参照する、もしくは、CreateObjectを使うことで、IEオブジェクトを直接操作するのが定番かと思います。自分自身、今までは、Excel VBAのマクロで,IEを自動操作しよう (DOMセレクタ関数をVBAで自作)というblog記事を参考に、IEの制御部分をラップしたクラス(VAMIE)を自作して使っていたのですが…。
自動制御の対象とする IEのバージョンが変わるごとに、細々とした修正の手間が生じる&バージョン間の差異を吸収するような不毛な処理を実装し続ける(※)ことに発狂しかけたので、このたび制御方法を見直し、決別することにしました。
※ ご存知の方も多いと思いますが、IEはバージョンによって挙動(DOM操作など)に差異があったりなかったりします。まともに複数バージョンのIEに対応したVBAコードを書こうとすると…(以下略
【IEを操作するただ1つの冴えた方法】
IEを直接操作することをやめ、Selenium VBAを利用することにしました。Selenium VBAは、Seleniumというブラウザ操作を仲介してくれるツールキットを、VBAから利用するためのラッパーです。イメージ図を下に示すと、従来の操作方法が左、Selenium VBAを用いた方法が右になります。
Seleniumは、Webアプリの機能テストを自動化するためのツールキットで、Webアプリの自動テストを実現するために、各種ブラウザを制御する機能に加え、動作結果を確認するための機能が含まれています。今回は、Selenium が持つ機能のうち、ブラウザを制御する機能のみを用います。
Seleniumについては、下記blog記事の解説が大変分かり易いのでおススメです。
なお、Seleniumのブラウザの制御機能は強力で、IEに限らず、FirefoxやChrome、Phantom.js(GUIを備えないWebkitエンジンのブラウザ)の操作も可能です。また、ブラウザのバージョン間の挙動の差異も、Selenium側である程度吸収してくれます。
このSeleniumの強力なブラウザ制御機能を使うことで、VBA側では、Seleniumを操作するコード(ブラウザを直接操作する場合とほとんど同じです。)を書くだけで、どのブラウザ、どのバージョンであっても、だいたい同じように動作させることが可能になります。
要するに、Seleniumを介することで、ブラウザ間・バージョン間の挙動の差異に頭を悩まされることがなくなります。
ほんともう、使わない理由がないですね!
【インストール方法】
- お好みでFirefoxをインストールしてください。
- 下記理由から、インストールをお薦めします。
- Firefox専用のプラグイン Selenium IDEを使うことで、Selenium操作用のコードを半自動で作成できます
- Firefoxのインスペクタを使うとCSSセレクタが手軽に使えます。
- Selenium VBAの公式サイト(Downloadsのページ) から、
SeleniumWrapperSetup-*.*.*.*.exeというインストーラをダウンロードし、実行してください。
以上です。
別途Selenium公式のバイナリや、コンポーネントをダウンロードする必要はありません。(本来なら。)
別途Selenium公式のバイナリや、コンポーネントをダウンロードする必要はありません。(本来なら。)
Selenium VBAのインストーラに、必要なものがすべて含まれています。
なお、2014/2現在、Firefox 27をインストールした環境に、SeleniumWrapperSetup-1.0.17.0をインストールしたところ、下図のようにSelenium IDEのアイコンが表示されませんでした。
Seleinum の公式サイト(Downloadsのページ)から、Selenium IDEをインストールし直すことで、正常に表示されるようになります。
(おそらく、Selenium VBAのインストーラに含まれるIDEのバージョンが古く、最新のFirefoxに対応していないのではないかと思うのですが…。未確認です。)
なお、2014/2現在、Firefox 27をインストールした環境に、SeleniumWrapperSetup-1.0.17.0をインストールしたところ、下図のようにSelenium IDEのアイコンが表示されませんでした。
Selenium IDEのアイコンが表示されていない状態 |
(おそらく、Selenium VBAのインストーラに含まれるIDEのバージョンが古く、最新のFirefoxに対応していないのではないかと思うのですが…。未確認です。)
Selenium IDEのダウンロードリンクの場所 |
正常にアイコンが表示された状態 |
【サンプルコード】
【使い方】
ざっくり書くと、Selenium VBAでのブラウザの制御方法は、- 制御するブラウザと、初期ページ(ベースとなるURL)の指定
- 必要に応じて、ブラウザの設定
- 上記サンプルコードでは省略
- ページの取得
- ページ内の各要素の操作
といった流れになります。
次回以降、複数回に分けてSelenium VBAを用いたブラウザの自動制御方法を解説したいと思います。
【ひとこと】
- 何はともあれ、CreateObjectを使ったコードは窓から投げ捨てて、Selenium VBAを使えばいいと思うよ!