LoginSignup
26
27

【Selenium】VBAでもWebDriverを自動で更新したい!

Last updated at Posted at 2021-10-03

はじめに

とうとう自分の職場にも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コードです。

TinySeleniumVBA
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
SeleniumBasic
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

よいスクレイピングライフを!

注釈

    1. 一応直接操作するやり方はあるらしい ↑ 。
26
27
64

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
27