VBA:【Selenium×Chrome】ブラウザのドライバ(WebDriver、chromedriver)のバージョンチェックと自動更新
「Selenium」を導入しようとして、ブラウザのドライバのバージョン関連で困った点。
◆Chrome版
導入方法(Accessの場合)
下記の画像のように設定して実行することで自動更新が行われます。
①フォームのボタンを作成し「その他」→「名前」を「実行」とする。
②「イベント」タブ→「クリック時」を「イベントプロシージャ」にする。
導入方法(Excelの場合)
①「マクロの登録」から「実行_Click」を呼び出す。
②VBAの「★」部分をExcelのものにする。
VBA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
Option Explicit 'Windows APIの宣言' Private Declare PtrSafe Function URLDownloadToFile _ Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Long, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long) As Long '#######################################################' 'フォームのボタン押下時' Public Sub 実行_Click() If MsgBox("実行します。", vbYesNo) = vbYes Then 'Yesの場合、バージョンのチェックと更新を実行します。' Call chkChromeVersion Else MsgBox "実行を中止しました。" End If End Sub '#######################################################' 'チェックと更新プログラムのMain部分' Public Sub chkChromeVersion() Dim BrowserVer As String Dim thisDriverVer As String Dim xTmpPath As String Dim DownloadFileName As String Dim SeleniumDriverPath As String Dim uName As String xTmpPath = CurrentProject.Path & "\xTmp"'Access用' 'xTmpPath = ThisWorkbook.Path & "\xTmp"'★'←Excelの場合はこちらに変更' DownloadFileName = xTmpPath & "\chromedriver_win32.zip" '保存先をデフォルトから変更している方は変更してください。' uName = Environ("USERNAME") SeleniumDriverPath = "C:\Users\" & uName & "\AppData\Local\SeleniumBasic\chromedriver.exe" '" 'フォルダの有無の確認。なければフォルダを作成する' If Dir(xTmpPath, vbDirectory) = "" Then MkDir xTmpPath End If 'PCのブラウザのバージョンをチェック' BrowserVer = chkBrowserVer 'Seleniumで保存しているドライバのバージョンチェック' If Dir(SeleniumDriverPath) = "" Then 'ない場合はチェックせず、新しいファイルを書き込む' Else thisDriverVer = chkDriverVer(SeleniumDriverPath) End If If BrowserVer <> thisDriverVer Then 'ブラウザバージョンと一致したドライバのダウンロード' Call DriverDownload(BrowserVer, DownloadFileName) 'ダウンロードしたファイルを解凍して所定の場所にドライバを保存' Call DriverUpdate(DownloadFileName, xTmpPath, SeleniumDriverPath) Else MsgBox "バージョン一致" '何もしない' End If MsgBox "完了" End Sub '*********************************************************' '//【Chrome】ブラウザのバージョンチェック' Function chkBrowserVer() As String Dim chkVer As String chkVer = "HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\BLBeacon\version" chkBrowserVer = CreateObject("WScript.Shell").RegRead(chkVer) End Function '*********************************************************' '//現在SeleniumBasicフォルダに保存されているドライバのバージョンをチェックします' Function chkDriverVer(SeleniumDriverPath As String) As String Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") chkDriverVer = FSO.GetFileVersion(FileName:=SeleniumDriverPath) End Function '*********************************************************' '//ドライバをダウンロードします' Public Sub DriverDownload(BrowserVer As String, dFileName As String) Dim dURL As String Dim dResult As String 'ダウンロードするファイルのURL' dURL = "https://chromedriver.storage.googleapis.com/" & BrowserVer & "/chromedriver_win32.zip" 'ダウンロード' dResult = URLDownloadToFile(0, dURL, dFileName, 0, 0) End Sub '*********************************************************' '//ドライバを解凍して特定の場所に保存します。' Public Sub DriverUpdate(DownloadFileName As String, xTmpPath As String, SeleniumDriverPath As String) Dim psCommand As String Dim wsh As Object Dim dResult As String '//実行するPowerShellのコマンド作成。「 -Force」で上書き。' psCommand = "powershell -NoProfile -ExecutionPolicy Unrestricted Expand-Archive -Path " & DownloadFileName & " -DestinationPath " & xTmpPath & " -Force" Set wsh = CreateObject("WScript.Shell") '//PowerShellのコマンド実行' '指定した場所に解凍されます。' dResult = wsh.Run(Command:=psCommand, WindowStyle:=0, WaitOnReturn:=True) '解凍したexeファイルをSeleniumのドライバに上書き' FileCopy xTmpPath & "\chromedriver.exe", SeleniumDriverPath Set wsh = Nothing End Sub |
◆Egde版
VBA:【Selenium×Edge】ブラウザのドライバ(webdriver、edgedriver)のバージョンチェックと自動更新用VBAコード
【VBA×Selenium】Edge:ブラウザのドライバとSelenium Basicのブラウザのドライバのバージョンを比較して、異なるバージョンの場合は上書きする方法について