chromedriverをpowershellで自動更新する

今までchromedriverの自動更新をネットで拾ってきたpowershellでやっていたのだが、chromedriverの更新方法が変わったので、それに対処した。
pythonを使っている人には本来必要ないようだけど、限界環境でその他のseleniumを使っている方、なるべく環境を変えたくない方向けに。日本であと2人くらいは困っている人がいるはず。
最初の3つのパラメータを自分の環境に合わせて変える必要がある。

```diff_powershell
# chrome実行ファイルの場所の設定
[CmdletBinding()]
param (
    [string]$ChromeDir="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
)

# chrome driverのディレクトリの相対指定
$chromeDriverRelativeDir = "..\..\AppData\Local\SeleniumBasic"

# chrome driverのplatformの設定
# win32/win64/linux64/mac-arm64/mac-x64のいずれか
$driverPlatform = "win32"

$thisScriptRoot = if ($PSScriptRoot -eq "") { "." } else { $PSScriptRoot }

$chromeDriverDir = $(Join-Path $thisScriptRoot $chromeDriverRelativeDir)
$chromeDriverFileLocation = $(Join-Path $chromeDriverDir "chromedriver.exe")
$chromeVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($ChromeDir).FileVersion
$chromeMajorVersion = $chromeVersion.split(".")[0]

if (-Not (Test-Path $ChromeDir -PathType Leaf)) {
  Write-Output "Chrome not found in '$ChromeDir'. Please, install chrome or specify custom chrome location with -ChromeDir argument."
  Pause
  Exit 1
}

if (-Not (Test-Path $chromeDriverDir -PathType Container)) {
  Write-Output "Chrome Driver folder '$chromeDriverDir' is not found. Please install selenium or specify selenium location."
  Pause
  Exit 1
#  New-Item -ItemType directory -Path $chromeDriverDir
}

if (Test-Path $chromeDriverFileLocation -PathType Leaf) {
  # get version of curent chromedriver.exe
  $chromeDriverFileVersion = (& $chromeDriverFileLocation --version)
  $chromeDriverFileVersionHasMatch = $chromeDriverFileVersion -match "ChromeDriver (\d+\.\d+\.\d+(\.\d+)?)"
  $chromeDriverCurrentVersion = $matches[1]

  if (-Not $chromeDriverFileVersionHasMatch) {
    Write-Output "failed to get version of chrome driver"
    Write-Output "update chrome driver"
    $chromeDriverCurrentVersion = ''
  }
}
else {
  # if chromedriver.exe not found, will download it
  $chromeDriverCurrentVersion = ''
}

# chrome-for-testingより、適切なバージョンの取得
$chromeDriverExpectedVersion = $chromeVersion.split(".")[0..2] -join "."
$chromeDriverJsonUrl = "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"
$json = Invoke-RestMethod -Uri $chromeDriverJsonUrl

$json_list = $json.versions | where{$_.version -match $chromeDriverExpectedVersion}
$json_proper_version = $json_list[$json_list.Length-1]
$chromeDriverProperVersion = $json_proper_version.version

$chromeDriverLatestVersion = $json.versions[$json.versions.Length-1].version

Write-Output "chrome version:        $chromeVersion"
Write-Output "chromedriver version : $chromeDriverCurrentVersion"
Write-Output "proper driver version: $chromeDriverProperVersion"
Write-Output "latest driver version: $chromeDriverLatestVersion"

# will update chromedriver.exe if old patch

$needUpdateChromeDriver = $chromeDriverCurrentVersion -ne $chromeDriverProperVersion
if ($needUpdateChromeDriver) {
  $json_driver = $json_proper_version.downloads.chromedriver | where{$_.platform -eq $driverPlatform}
  $chromeDriverZipLink = $json_driver.url
  Write-Output "Will download $chromeDriverZipLink"

  $driverZipFileName = $chromeDriverZipLink.split("/")[-1]
  $chromeDriverZipFileLocation = $(Join-Path $chromeDriverDir $driverZipFileName)
  $driverFileName = $driverZipFileName.split(".")[0]

  Invoke-WebRequest -Uri $chromeDriverZipLink -OutFile $chromeDriverZipFileLocation
  Expand-Archive $chromeDriverZipFileLocation -DestinationPath $chromeDriverDir -Force
  Move-Item $(Join-Path $chromeDriverDir $driverFileName | join-path -ChildPath "\chromedriver.exe") $chromeDriverFileLocation -Force
  Remove-Item -Path $chromeDriverZipFileLocation -Force
  Remove-Item -Path $(Join-Path $chromeDriverDir $driverFileName) -Recurse -Force
  $chromeDriverFileVersion = (& $chromeDriverFileLocation --version)
  Write-Output "chromedriver updated to version $chromeDriverFileVersion"
}
else {
  Write-Output "chromedriver is actual"
}
```
ちなみにchromeの自動更新を止めるには
C:\Program Files (x86)\Google\Update\GoogleUpdate.exe
のファイル名を変えると、無理やり止められるようだ。