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?

WebDriverを自動でダウンロードと更新する

Last updated at Posted at 2024-11-09

はじめに

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初投稿になります。
プログラミングにそんなに詳しくないので作りが拙い部分もあるかもしれません。ご指摘大歓迎なのでコメントいただけると助かります!(勉強させてください)

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?