はじめに
WebDriverを使用していたら、ある日突然ブラウザの更新が入ってしまいエラーが発生してしまうなんてことありませんか?その度にブラウザのバージョンを確認してそのバージョンにあったWebDriverをダウンロードするのが案外手間だったりします(実際、私は手間でした・・・)。なので、OS起動時にWebDriverのダウンロードと更新を自動化するプログラムを作成しました。
処理
WebDriverのダウンロードと解凍処理の流れは以下です。
Private sub DownloadWebDriver(ByVal BrowserVersion As String)
Dim DownloadUrl As String =
String.Format("https://storage.googleapis.com/chrome-for-testing-public/{0}/win64/{1}", BrowserVersion, "chromedriver-win64.zip")
Dim ZipFilePath As String = Path.Combine(DownloadPath, CHROME_DRIVER_ZIP_FILE)
Try
Using HttpClient As New HttpClient()
'Byte型配列にダウンロードデータを格納
Dim FileBytes As Byte() = HttpClient.GetByteArrayAsync(DownloadUrl).Result
If Not Directory.Exists(DownloadPath) Then
Directory.CreateDirectory(DownloadPath)
End If
'ダウンロードデータをzipファイル形式に書き出す
File.WriteAllBytes(ZipFilePath, FileBytes)
End Using
'zipファイルの解凍
ExecuteUnZip(ZipFilePath)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Function
Private Sub ExecuteUnZip(ByVal ZipFilePath As String)
Try
Dim WebDriverPath As String = Path.Combine(DownloadPath, "chromedriver-win64", "chromedriver.exe")
If File.Exists(WebDriverPath) Then
File.Delete(WebDriverPath)
End If
'zipファイルの解凍処理
ZipFile.ExtractToDirectory(ZipFilePath, DownloadPath, True)
File.Delete(ZipFilePath)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Function
HttpClientクラスを使って指定のURLからWebDriverをダウンロードして、ZipFileクラスでダウンロードしたZipファイルを解凍する流れになります。これでダウンロードから圧縮ファイルの解凍までできました。
ですが、このプログラムをスタートアップフォルダに格納するとOS起動時に毎回ダウンロードしてしまいます。それですと、無駄なダウンロード処理が発生してしまうため、現在のブラウザのバージョンと保存しているWebDriverのバージョンが不一致の時だけダウンロードするようにしました。ブラウザのバージョンはレジストリで持っているので、そこから値を持ってきています。
Private Function GetWebBrowserVersion() As String
Dim RegData As RegistryKey = Registry.CurrentUser.OpenSubKey("レジストリキーの階層を指定する")
Return RegData.GetValue("Versionのパラメータを指定する").ToString()
End Function
ブラウザのバージョンが取得出来たら、あとは設定ファイルなどに持たせてあるWebDriverのバージョンと比較してあげればよさそうですね。
さいごに
以上がQiita初投稿になります。
プログラミングにそんなに詳しくないので作りが拙い部分もあるかもしれません。ご指摘大歓迎なのでコメントいただけると助かります!(勉強させてください)