1 はじめに
説明はExcelVBAの操作をある程度行っている方向け。初めての方はこちらを参照
SeleniumBasicとの比較
【メリット】
・インストール不要のため共同作業が容易
・WebDriver自動更新機能が標準装備
・バージョンアップ、バグフィックスへの対応
【デメリット】
・参考記事が少なく、未更新が多い
⇒私が経験した事をnote記事に書きまくりました
2 SeleniumVBA.xlsmのダウンロード
こちらからファイルを直接ダウンロード
本記事執筆時点の最新バージョンは6.2
xlam(アドイン)形式のファイルは2024年3月以降、提供停止
3 セキュリティの設定
- ・「SeleniumVBA.xlsm」アイコン右クリック ⇒ 「プロパティ」 ⇒ 「許可する」
- ・「開発」タブ ⇒ 「Visual Basic」ボタン ⇒ 「ツール」⇒ 「オプション」
- ・「編集」タブ ⇒ 「変数の宣言を強制する」にチェック
- ・「全般」タブ ⇒ エラーオプション「エラー処理対象外のエラーで中断」
4 動作確認
「SeleniumVBA.xlsm」内の標準モジュール「test_ActionChains」を実行し、Edgeが起動して画面が動いていればOK
Chrome利用はコードを「Driver.StartEdge」⇒「Driver.StartChrome」にして実行
5 運用
個人での使用は「SeleniumVBA.xlsm」で運用。配布する場合はこちらを参照
個人運用時は、新規に標準モジュールを作成してコードを記述。ワークシートにはデータ入出力および実行ボタンを作成して運用
6 公式Wiki及びサンプルコード
公式Wikiページはこちら。困った時はDicussionで質問することも可
英語なので下記にSeleniumVBAでGoogle翻訳を使用できるコードを掲載
「test_」で始まる標準モジュールには、多くのサンプルコードが掲載
7 参考記事
私が実務で経験したノウハウをnote記事に掲載
8 ここからは苦労話
一般事務員しかいない弊社の環境では、以前までセキュリティソフトの設定等によりWebDriverの自動ダウンロードができずに下記画面のようなエラーが出ていました。
このままでは、WebDriverの更新頻度が1か月に1回程度あるため、その環境で継続運用することは困難となってしまいます。
ただ、手動でChromeを起動してURLを直接打ち込むとダウンロードできることから、完全にはブロックされていないと判断して、暫定的に独自に以下のコードによりクラスモジュール「WebDriverManager」の一部を改変して自動ダウンロードできるようにしていました。
******************************************************’*******************************************
'【改変コード】(Chrome限定。動作保証はありません)
'「UrlDownloadToFile」が動作しないが、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
'Chromeを立ち上げてzipファイルをdownload直下に保存する
Dim Ch As Variant
Set Ch = CreateObject("WScript.Shell")
Ch.Run ("chrome.exe -url " & Url)
'dawnload完了まで待つ
Dim i As Long
Do Until fso.FileExists(driverFolder & "\" & "chromedriver-" & platformString & ".zip")
If i <= 20 Then '20秒以内の場合
sleep 1000 '1秒待つ
i = i + 1
Else
AppActivate Application.caption
MsgBox "WEBドライバのファイルが指定フォルダに格納されていません" & Chr(10) & _
"以下のとおり対処してください" & Chr(10) & _
"1 Chromeの「設定」-「ダウンロード」の画面から" & Chr(10) & _
" ①保存先を「ダウンロード」フォルダ直下に変更" & Chr(10) & _
" ②「ダウンロード前に各ファイルの保存場所を確認する」をoff" & Chr(10) & _
"2 設定完了後、OKボタンでExcel画面に戻って再試行する", vbCritical + vbOKOnly
End
End If
Loop
'Chromeを終了する
Set Ch = Nothing
'zipファイルをdownload直下からtmpフォルダに移動する
fso.MoveFile driverFolder & "\" & "chromedriver-" & 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
上記コードはChrome限定(Edge版の書き換えは可能と思われます)であり動作保証はありませんので、自己責任での御利用でお願いします。
理由は不明ですが、現在は標準状態でもダウンロードできるようになりましたので、上記コードは使用していません。もし他の方に役に立つことがあればと思い、掲載しています。