前回は、ドライバプロセスが“ゴミ”として残らないように、起動したMicrosoft Edge WebDriverやMicrosoft Edgeを終了するためのスクリプトを先に作成した。今回は、Microsoft Edge WebDriverとMicrosoft Edgeを起動する処理をPowerShellスクリプトにまとめる。
→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。
Microsoft Edge WebDriver起動処理をスクリプト用に書き換えていく
前々回に紹介したMicrosoft Edge WebDriverの起動処理をスクリプト用に整えていく。まず、起動処理を始める前に不要なプロセスの終了処理を走らせる。
webdriver_edge_stop.ps1
PowerShellからSelenium経由でWebDriverを使うことになるので、PowerShell Seleinumモジュールが必要だ。PowerShell Seleniumモジュールがインストールされているかどうか確認し、インストールされていない場合にはインスールを行うように処理を記述する。
if (-Not (Get-InstalledModule -Name Selenium 2> $Null)) {
'Seleniumモジュールをインストールします。'
Install-Module -Name Selenium -AllowPrerelease -Force
Get-InstalledModule -Name Selenium
}
Start-SeDriverコマンドレットでMicrosoft Edge WebDriverを起動する。ここで起動してくれれば処理は完了だが、少なくとも数週間ごとには起動しなくなるので(Microsoft Edgeのバージョンが上がると、ドライバとバージョンがずれるので起動しなくなる)、起動しなかった場合の処理が重要だ。
'Microsoft Edge WebDriverを起動します。'
$Size = '1200,800'
if (-Not (Start-SeDriver -Browser Edge -Size $Size 2> $Null 3> $Null))
{
# 起動しなかった場合の処理をここに加える
}
以降は、Microsoft Edge WebDriverが起動しなかった場合の処理だ。システムにインストールされているMicrosoft EdgeのバージョンとMicrosoft Edge WebDrvierのバージョンが不一致であることが、Microsoft Edge WebDriverが起動しない原因であると仮定し、インストールされているMicrosoft Edgeと同じバージョンのMicrosoft Edge WebDriverをダウンロードしてデプロイする処理を行う。
まず、先ほどの起動処理でゴミプロセスが残っている可能性を考慮して、終了スクリプトを実行しておく。
webdriver_edge_stop.ps1
次に、システムにインストールされているMicrosoft Edgeのバージョン番号を取得する。
$EdgeDir='C:\Program Files (x86)\Microsoft\Edge\Application\'
$EdgeVersion=( Get-ChildItem -Name $EdgeDir |
Where-Object { $_ -NotMatch "[a-zA-Z]+" }
バージョン番号を取得したら、Microsoft Edge WebDriverをダウンロードするURLと、ダウンロードしてきたファイルをデプロイするパス、デプロイするために一時的にZIPファイルを展開するディレクトリパスなどを変数に用意する。
$DriverURL="https://msedgedriver.azureedge.net/$EdgeVersion/edgedriver_win64.zip"
$SeModVer=(Get-InstalledModule -Name Selenium).Version -replace "-.+$",""
$DriverDir="$env:HOME\Documents\powershell\Modules\Selenium\$SeModVer\assemblies"
$DriverDownloadDir="$DriverDir\_download"
ダウンロードしてきたZIPファイルは一時ディレクトリで展開して処理する。次のような感じで一時ディレクトリの作成と削除を行う処理を書き、その間に展開とデプロイの処理を書けばよい。
New-Item $DriverDownloadDir -ItemType Directory -Force
# ここにドライバのダウンロードと展開の処理を書く
Remove-Item $DriverDownloadDir -Recurse -Force
Microsoft Edge WebDriver ZIPファイルのダウンロードにはcurl.exeコマンドを使う。次のように実行する。
"Microsoft Edge WebDriver version $EdgeVersion をダウンロードします。"
curl -get `
-o $DriverDownloadDir\edgedriver_win64.zip `
$DriverURL
PowerShellでは、Expand-ArchiveコマンドレットでZIPコマンドを展開することができる。次のようにダウンロードしてきたZIPファイルを展開して、Copy-ItemコマンドレットでMicrosoft Edge WebDriverの実行バイナリファイルであるmsedgedriver.exeファイルをデプロイする。
"Microsoft Edge WebDriver version $EdgeVersion をインストールします。"
Expand-Archive -Path $DriverDownloadDir\edgedriver_win64.zip `
-Destination $DriverDownloadDir `
-Force
Copy-Item -Path $DriverDownloadDir\msedgedriver.exe `
-Destination $DriverDir\msedgedriver.exe `
-Force
これでMicrosoft EdgeとMicrosoft Edge WebDriverのバージョンが一致したはずなので、再度Microsoft Edge WebDriverの起動処理を行う。
if (-Not (Start-SeDriver -Browser Edge -Size $Size 2> $Null 3> $Null))
{
# ここでさらに起動しない場合には原因が不明なので、ドライバを終了して
# スクリプトも終了する
webdriver_edge_stop.ps1
Exit
}
通常であれば、ここでMicrosoft Edge WebDriverとMicrosoft Edgeが起動する。もし起動してこないなら、もうどうにもならないのでそのまま処理を終了する。