1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SeleniumVBA】最速の導入・運用手順

Last updated at Posted at 2024-12-29

1 はじめに

SeleniumVBAは、TinySeleniumVBA(作成者は日本の方)をベースに機能を拡張したツールであり、GCuser99氏により作成された。プログラム言語のVBAを用いてWebDriverと通信することによりWEBブラウザの操作を自動化できる。
VBAを用いてブラウザを操作する他のツールとして、SeleniumBasicおよびZeroInstall BrowserDriver for VBAが挙げられる(下図参照)。

1751059850-4ThSs9l51OiCbDQWJRkmXxB0.png

SeleniumBasicとの比較
【メリット】
インストール不要でExcelで動作するためファイルのやりとりが容易
WebDriver自動更新機能が標準装備
バージョンアップ、バグフィックスへの対応あり
ExecuteCDPによるCDPの多彩な機能が利用可能(一部制限あり)
ShadowRoot要素検索でJavaScriptが不要な専用メソッド有
・VBAだけで処理が完結するためカスタマイズが容易
未実装だがWebDriver BiDiの対応も技術的に可能

【デメリット】
・増えつつあるが参考記事が少ない。また生成AIの学習が不十分。
 ⇒私が経験した事をnote記事に掲載。生成AIが学習することを期待
・高機能の代償としてMicrosoft Defenderの誤検知が発生しやすい
 ⇒他社製セキュリティソフト導入で無効化が最善
 ⇒ブックにパスワードを設定する

2 SeleniumVBA.xlsmのダウンロード

公式サイト(GitHub)からファイルを直接ダウンロード
・Defender環境の場合はこちらの公式サイトを利用(ブックのパスワードは123)。

2025年7月19日時点の最新バージョンは6.6
xlam(アドイン)形式のファイルは、2024年3月以降、提供停止
・対象ブラウザは、Edge、Chrome、FireFox(ただし一部機能制限やバグがあり)。EdgeのIEモードはバージョン5.9から非対応。

3 セキュリティおよびVBEの設定

・「SeleniumVBA.xlsm」アイコン右クリック ⇒ 「プロパティ」 ⇒ 「許可する」
・「開発」タブ ⇒ 「Visual Basic」ボタン ⇒ 「ツール」⇒ 「オプション」
・「編集」タブ ⇒ 「変数の宣言を強制する」にチェック
・「全般」タブ ⇒ エラートラップ「エラー処理対象外のエラーで中断」

4 動作確認

「SeleniumVBA.xlsm」内の標準モジュール「test_ActionChains」をVBE上から実行して、Edgeが起動して画面が動いていればOK

Chromeブラウザの利用はコードを「driver.StartEdge」を「driver.StartChrome」に変更してから実行
Edge IEモードはサポート継続が難しくなったことから、バージョン5.9から非対応

この時点でWebDriverがダウンロードフォルダに自動ダウンロードされる。ここでエラーとなる場合「8 ここからは苦労話」を参考に。

5 運用

この「SeleniumVBA.xlsm」一つで運用でき、ファイル名を変更しても動作に支障はなし。なお、配布する場合はこちらを参照

運用開始時は、新規に標準モジュールを作成してコードを記述。ワークシートにはデータ入出力および実行ボタン作成エリアとして運用

6 公式Wiki

公式Wikiページはこちら(GitHub)。困った時はDicussionで質問することも可

SeleniumVBA.xlsmの「test_」で始まる標準モジュールに、実務で有用とされる多数のサンプルコードが掲載

7 参考記事

私が実務で経験したノウハウをnote記事に掲載。これ以外にも多数記事あり。

8 参考動画

DiscordコミュニティExcel-Fun.xls*でお世話になっている、いおり様によるSeleniumVBAの解説動画が公開中。

9 ここからは苦労話

一般事務員しかいない弊社の環境では、以前までセキュリティソフトの設定等によりWebDriverの自動ダウンロードができずに下記画面のようなエラーが出ていました。

1734557353-oib8GRA2YCDgaLBrk4H1FcKf.png

このままでは、WebDriverの更新頻度が1か月に1回程度あるため、その環境で継続運用することは困難となってしまいます。

WebDriverのダウンロードはWindowsAPIであるUrlDownloadToFile(クラスモジュールWebDriverManager内)で実行していますが、環境によって動作しないことが判明しています。

動作しない場合、以下の画像のようにUrlDownloadToFileにブレークポイントを設定して、ローカルウインドウに表示されるurlをコピーします。そしてブラウザを手動で立ちあげ、アドレス欄にurlをペースト+Enterしてみてください。

taiou.png

上記の操作でダウンロードできる環境であれば、完全にはブロックされていないため、暫定的に以下のコードによりブラウザ経由によるダウンロードに変更したところ動作しました。

コード変更箇所は以下の画像のとおり、クラスモジュール「WebDriverManager」内あるプロシージャ「DownloadAndInstallDriver」のうち「UrlDownloadToFile」以降から「End Sub」までを上書きしました。

タイトルなし2.png

VBA
'*************************************************************************************************
'【改変コード】(Edge/Chrome限定。動作保証はありません)
'「UrlDownloadToFile」が動作しないが、Edge/Chromeを起動してURLを直接打ち込むとダウンロードできる場合に有効
'クラスモジュール「WebDriverManager」プロシージャ「DownloadAndInstallDriver」のうち「UrlDownloadToFile」以降から「End Sub」まで改変
'*************************************************************************************************
    'i-Filterが原因でUrlDownloadToFileが動作しないためコメント化
    'UrlDownloadToFile 0&, StrPtr(Url), StrPtr(tmpInstallZipPath), 0&, 0&
    'make sure driver zip file was created successfully
    If Not fso.FileExists(tmpInstallZipPath) Then
    'Edge/Chromeを立ち上げてzipファイルをdownload直下に保存する
     Dim Br As Object
     Set Br = CreateObject("WScript.Shell")
     
     Dim brName As String, zipName As String
     Select Case browser
      Case svbaBrowser.Edge
        brName = "msedge"
        zipName = "edgedriver_"
      Case svbaBrowser.Chrome
        brName = "chrome"
        zipName = "chromedriver-"
     End Select
     
     Br.Run (brName & ".exe -url " & URL)
    'dawnload完了まで待つ
     Dim i As Long
     Do Until fso.FileExists(driverFolder & "\" & zipName & platformString & ".zip")
       If i <= 20 Then '20秒以内の場合
         Sleep 1000    '1秒待つ
         i = i + 1
       Else
         AppActivate Application.caption
         MsgBox "WEBドライバのファイルが指定フォルダに格納されていません" & Chr(10) & _
                "以下のとおり対処してください" & Chr(10) & _
                "1 ブラウザの「設定」-「ダウンロード」の画面から" & Chr(10) & _
                "  ①保存先を「ダウンロード」フォルダ直下に変更" & Chr(10) & _
                "  ②「ダウンロード前に各ファイルの保存場所を確認する」をoff" & Chr(10) & _
                "2 設定完了後、OKボタンでExcel画面に戻って再試行する", vbCritical + vbOKOnly
         End
      End If
     Loop
     'Edge/Chromeを終了する
     Set Br = Nothing
     'zipファイルをdownload直下からtmpフォルダに移動する
     fso.MoveFile driverFolder & "\" & zipName & platformString & ".zip", tmpInstallFolder
    End If
    If fso.FileExists(tmpInstallDriverpath) Then fso.DeleteFile tmpInstallDriverpath, True
    shll.Namespace(tmpInstallFolder).CopyHere shll.Namespace(tmpInstallZipPath).Items.Item(tmpZipDriverFilename)
    'check if driver exists and if it does, make sure it isn't in use before overwrite
    If fso.FileExists(driverPath) Then
        If isProcessRunning(driverFileName) Then taskKillByImage (driverFileName): WebShared.SleepWinAPI 100
    End If
    'copy file from temp folder to driver path
    fso.CopyFile tmpInstallDriverpath, driverPath, True
    'if created tmp folder, then delete it
    If Dir(tmpInstallFolder) <> "" Then fso.DeleteFolder Left$(tmpInstallFolder, Len(tmpInstallFolder) - 1), True
'*************************************************************************************************
'改変箇所 ここまで
'*************************************************************************************************
End Sub

上記コードはEdge/Chrome限定であり動作保証はありませんので、自己責任での御利用でお願いします。
【注】2025年3月8日にEdge/Chromeの両対応となるよう更新しました。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?