はじめに
Selenium を使って Microsoft Edge の自動操作を行う際、msedgedriver.exe のバージョンとブラウザ本体のバージョンが一致していないと、起動エラーや動作不良が発生することがある。
特に企業環境や定期的なアップデートがかかるPCでは、知らぬ間にバージョン不整合が起きやすい。
そこで今回は、Edge本体のバージョンと WebDriver を照合し、自動的に更新する PowerShell スクリプトと、Windows タスクスケジューラによる自動実行設定を紹介する。
Python や PowerShell からの起動例も合わせて掲載しているので、すぐに使い始められる構成だ。
スクリプトの概要と特徴
以下の PowerShell スクリプトは、次の機能を持つ。
- Edge のバージョンをレジストリから取得
- インストール済み msedgedriver.exe のバージョンと照合
- バージョンが異なる場合は自動ダウンロード・更新
- 64bit 版を既定で使用(32bit にも切替可能)
- ドライバが PATH に登録されていない場合は自動で追加
- ログ記録や一時ファイルのクリーンアップも完備
スクリプト本体は以下のパスに保存する前提で作成されている。
C:\Scripts\Update-EdgeWebDriver.ps1
配置ディレクトリや構成は冒頭で自由に調整可能だ。
PowerShell スクリプトの設置手順
- 任意のエディタで以下の内容を貼り付け、「
C:\Scripts\Update-EdgeWebDriver.ps1
」として保存する - 必要に応じて
$InstallDir
や$DriverArch
を自環境に合わせて変更する - 管理者権限で一度手動実行し、動作を確認する
✅ ポイント:タスクスケジューラで自動化する場合でも、初回だけは管理者で手動実行しておくと安心だ
#requires -Version 5.1
<#
.SYNOPSIS
Microsoft Edge のバージョンと msedgedriver.exe のバージョンを照合し、必要に応じて自動更新する。
.DESCRIPTION
- Stable版 Edge を前提(Beta/Dev を使う場合は REG パスを切替)
- 64bit ドライバを取得(必要に応じて win32 に変更可)
- C:\Tools\msedgedriver に配置(変更可能)
#>
$ErrorActionPreference = 'Stop'
# ===== 設定ここから =====
$DriverArch = 'win64' # 'win64' or 'win32'
$InstallDir = 'C:\Tools\msedgedriver' # ドライバの配置先
$TempDir = Join-Path $env:TEMP 'EdgeWD_Update'
$LogDir = 'C:\Scripts\Logs'
$LogPath = Join-Path $LogDir 'Update-EdgeWebDriver.log'
$TimeoutSec = 120
# Stable の Edge バージョンを取るレジストリ。Beta/Devを使うなら以下のコメントを参照。
$EdgeRegPath = 'HKLM:\SOFTWARE\Microsoft\Edge\BLBeacon' # Stable
# Beta: 'HKLM:\SOFTWARE\Microsoft\Edge Beta\BLBeacon'
# Dev : 'HKLM:\SOFTWARE\Microsoft\Edge Dev\BLBeacon'
# Canary は通常自動更新のみ。ドライバURLは同様形式。
# ===== 設定ここまで =====
# ログ準備
New-Item -Force -ItemType Directory -Path $LogDir | Out-Null
Start-Transcript -Path $LogPath -Append
try {
Write-Host "=== Edge WebDriver Auto-Updater ==="
New-Item -Force -ItemType Directory -Path $InstallDir | Out-Null
New-Item -Force -ItemType Directory -Path $TempDir | Out-Null
# 1) Edge(ブラウザ)のバージョン取得
$edgeVersion = (Get-ItemProperty -Path $EdgeRegPath -Name 'version' -ErrorAction Stop).version
if (-not $edgeVersion) { throw "Edge version not found in registry: $EdgeRegPath" }
Write-Host "Edge version: $edgeVersion"
# 2) 既存ドライバのバージョン取得
$driverPath = Join-Path $InstallDir 'msedgedriver.exe'
$currentDriverVersion = $null
if (Test-Path $driverPath) {
try {
# "MSEdgeDriver.exe --version" の出力例: "MSEdgeDriver 129.0.2792.52 ..."
$verOut = & $driverPath --version 2>$null
if ($verOut -match '(\d+\.\d+\.\d+\.\d+)') {
$currentDriverVersion = $Matches }
} catch { }
if (-not $currentDriverVersion) {
# ファイル バージョンから取得
$currentDriverVersion = (Get-Item $driverPath).VersionInfo.FileVersion
}
}
Write-Host ("Current driver version: " + ($currentDriverVersion ?? "[not installed]"))
# 同一メジャー/ビルド系が必須。基本は完全一致を狙う。
$needsUpdate = $true
if ($currentDriverVersion -and ($currentDriverVersion -eq $edgeVersion)) {
$needsUpdate = $false
Write-Host "Driver is up to date."
}
if ($needsUpdate) {
Write-Host "Updating driver to: $edgeVersion"
# 3) ダウンロード URL を組み立て
# 公式配布: https://msedgedriver.azureedge.net/<version>/edgedriver_win64.zip
$baseUrl = "https://msedgedriver.azureedge.net/$edgeVersion/edgedriver_$DriverArch.zip"
$zipPath = Join-Path $TempDir "edgedriver_$DriverArch.zip"
# 4) ダウンロード(リトライ付き)
$maxRetry = 3
for ($i=1; $i -le $maxRetry; $i++) {
try {
Write-Host "Downloading ($i/$maxRetry): $baseUrl"
Invoke-WebRequest -UseBasicParsing -Uri $baseUrl -OutFile $zipPath -TimeoutSec $TimeoutSec
if ((Get-Item $zipPath).Length -gt 0) { break }
} catch {
if ($i -eq $maxRetry) { throw }
Start-Sleep -Seconds ([int][Math]::Min(5 * $i, 15))
}
}
# 5) 展開して配置
# zip 内にドライバ本体 "msedgedriver.exe" が含まれる
$extractDir = Join-Path $TempDir "extracted"
if (Test-Path $extractDir) { Remove-Item $extractDir -Recurse -Force }
Expand-Archive -Path $zipPath -DestinationPath $extractDir -Force
$extractedDriver = Get-ChildItem -Recurse -Filter 'msedgedriver.exe' -Path $extractDir | Select-Object -First 1
if (-not $extractedDriver) { throw "msedgedriver.exe not found in archive." }
# 既存プロセスが掴んでいると上書き失敗するため念のため終了
Get-Process -Name 'msedgedriver' -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
Copy-Item -Force $extractedDriver.FullName $driverPath
# 6) PATH に追加(なければ)
$currentPath = [Environment]::GetEnvironmentVariable('Path','Machine')
if ($currentPath -notmatch [Regex]::Escape($InstallDir)) {
[Environment]::SetEnvironmentVariable('Path', ($currentPath.TrimEnd(';') + ';' + $InstallDir), 'Machine')
Write-Host "System PATH に $InstallDir を追加しました(次回のシェルから有効)。"
}
# 7) 検証
$newVerOut = & $driverPath --version 2>$null
if ($newVerOut -match '(\d+\.\d+\.\d+\.\d+)') {
$newDriverVersion = $Matches Write-Host "Updated driver version: $newDriverVersion"
if ($newDriverVersion -ne $edgeVersion) {
Write-Warning "Driver version and Edge version do not match exactly. Edge:$edgeVersion Driver:$newDriverVersion"
}
} else {
Write-Warning "Driver updated, but version check failed."
}
}
Write-Host "Done."
}
catch {
Write-Error $_.Exception.Message
exit 1
}
finally {
# 後始末
try {
if (Test-Path $TempDir) { Remove-Item $TempDir -Recurse -Force }
} catch {}
Stop-Transcript | Out-Null
}
タスクスケジューラでの自動実行登録
スクリプトを自動で定期実行するため、タスクスケジューラに登録する。
- PC 起動時に1回実行
次のコマンドを管理者 PowerShell で実行することで、必要なタスクが登録される。
ps1ファイルのフォルダパス($script)の値は各環境に合わせて修正をしてほしい。
$script = 'C:\Scripts\Update-EdgeWebDriver.ps1'
# 起動時に実行
$act1 = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$script`""
$trg1 = New-ScheduledTaskTrigger -AtStartup
$set1 = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
Register-ScheduledTask -TaskName 'Update Edge WebDriver (At Startup)' `
-Action $act1 -Trigger $trg1 -Settings $set1 -RunLevel Highest -Force
Selenium での起動例(Python / PowerShell)
Python で Edge を起動するサンプル
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
driver_path = r"C:\Tools\msedgedriver\msedgedriver.exe"
options = Options()
options.add_argument("--start-maximized")
service = Service(executable_path=driver_path)
with webdriver.Edge(service=service, options=options) as driver:
driver.get("https://www.example.com")
print(driver.title)
PowerShell で Edge を起動するサンプル(.NET Selenium)
Add-Type -Path "$env:USERPROFILE\.nuget\packages\selenium.webdriver\*\lib\net48\WebDriver.dll"
$driverPath = "C:\Tools\msedgedriver\msedgedriver.exe"
$svcType = [OpenQA.Selenium.Edge.EdgeDriverService]
$svc = $svcType]::CreateDefaultService((Split-Path $driverPath), (Split-Path $driverPath -Leaf))
$opts = New-Object OpenQA.Selenium.Edge.EdgeOptions
$opts.AddArgument("--start-maximized")
$driver = New-Object OpenQA.Selenium.Edge.EdgeDriver($svc, $opts)
$driver.Navigate().GoToUrl("https://www.example.com")
$driver.Title
$driver.Quit()
ハマりポイントとその対策
トラブル内容 | 原因と対処方法 |
---|---|
Edge と WebDriver のバージョン不一致 | スクリプトが自動で完全一致版を取得。レジストリのバージョン取得元を要確認 |
zip 解凍時にアクセス拒否が出る | タスクを「最上位の特権で実行」に設定する |
PATH が通っておらず認識されない | スクリプトが初回実行時に PATH を自動追加。再起動で反映 |
32bit 用が必要 | $DriverArch = 'win32' に変更すれば32bitドライバも取得可能 |
プロキシ環境で失敗する | Invoke-WebRequest 前に DefaultWebProxy.Credentials を指定すると対応可能 |
まとめ
msedgedriver.exe のバージョン管理は Selenium ユーザーにとって避けて通れない課題だ。
手動で更新していた手間を自動化することで、テストや自動化処理の安定性が飛躍的に向上する。
本記事で紹介したスクリプトとタスクスケジューラ設定を活用すれば、Edge のバージョンに応じて WebDriver を自動で最新化する仕組みを簡単に構築できる。
特に複数台での運用やCI環境でも役立つ内容となっているため、ぜひ実践に取り入れてほしい。
Selenium 自動化をさらに強化したい方は、ブラウザ自動更新の仕組みと組み合わせて、完全にメンテナンスフリーな環境構築を目指すとよい。
コメント