はじめに
とうとう自分の職場にもIE終了の波がやってきました。
ソフトウェアのインストールが原則禁止の職場ではVBAからIEを自動操作するのは便利だったのですが、これからはそうもいきません。
GoogleChromeやMicrosoftEdgeはCOM経由でVBAから直接操作することができず1、基本的にはSeleniumというソフトウェアを中継して操作することになるとのこと。
しかし、Seleniumを利用するにはインストールが必要。弊職場ではちょっと厳しい。
SeleniumのインストールをせずともChromeやEdgeの操作ができないかとネットで調べたところ、こちらの記事を見つけました。
ピュアVBAなSeleniumクライアント「TinySeleniumVBA」
WebDriverの実行ファイルは必要ですが、これは実行ファイルさえ手に入れればインストールは不要です。さっそくこちらを試してみたところ、非常に簡単にChromeの自動操作ができました。
WebDriverのバージョン問題
SeleniumBasicを使うにしてもTinySeleniumVBAを使うにしても問題になるのが、WebDriverのバージョン問題。
SeleniumBasicやTinySeleniumVBAはWebDriverを介してブラウザを操作しますが、WebDriverとブラウザのバージョンが適合していなければなりません。
しかし、ブラウザのアップデートによりバージョンがずれ、プログラムが動作しなくなることがあります。
職場でマクロ作って人に渡したところ、ある日突然「なんか動かないんだけど!」って連絡が飛んでくる、という光景が容易に想像できます。zipをダウンロードして中身のexeを指定のフォルダに放り込むだけですが、マニュアルを作ってもわからん!って人は多そうだし、何よりめんどくさいですよね。
PythonではWebdriver Manager for PythonというWebDriverのバージョンを自動でブラウザに合わせてくれる便利なライブラリがあるそうで。いいな。VBAにもそういうの欲しいな。
というわけでWebDriverManager-for-VBA作ってみたよ
インストール
TinySeleniumVBAを使ってる人はWebDriverManager4TinySelenium.bas
を、SeleniumBasicを使っている人はWebDriverManager4SeleniumBasic.bas
をインポートするだけです。
gitが分かる人は
git clone github.com/yamato1413/WebDriverManager-for-VBA
でダウンロードしてもらえればいいですし,分からない人は右上の「Code」という緑のボタンからZIPでダウンロードしてください。
SafeOpen関数
ブラウザを開く処理をSafeOpen
に書き換えることで、WebDriverのバージョンを一切気にする必要がなくなります。
'//TinySeleniumVBA
Dim Driver As New WebDriver
Driver.Edge "WebDriverへのパス"
Driver.OpenBrowser
' ↓
SafeOpen Driver, Edge [,"WebDriverへのパス"] '// 第3引数は省略可
'// SeleniumBasic
Dim Driver As New Selenium.ChromeDriver
Driver.Start
' ↓
Dim Driver As New Selenium.WebDriver
SafeOpen Driver, Chrome
ブラウザを開く前にWebDriverの存在・バージョンをチェックします。
WebDriverが存在しない、またはバージョンがブラウザと異なる場合にWebDriverのダウンロード・展開を開始します。
存在しない時にもダウンロードを行うので、バージョンアップ時だけでなく、マクロ配布時にWebDriverを同梱したりWebDriverの入れ方マニュアルを作らなくてよくなります。
以下はSampleコードです。
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub Sample()
Dim Driver As New WebDriver
SafeOpen Driver, Edge
Driver.Navigate "https://www.google.co.jp/?q=selenium"
Sleep 3000
Driver.ShutDown
End Sub
Public Sub Sample()
Dim Driver As New Selenium.ChromeDriver
SafeOpen Driver, Chrome
Driver.Get "https://www.google.co.jp/?q=selenium"
Driver.Wait 3000
Driver.Quit
End Sub
よいスクレイピングライフを!
注釈
-
- 一応直接操作するやり方はあるらしい ↑ 。