(Python版)EdgeのWebDriver自動更新ライブラリ
先日ようやくバージョンアップを行いv7.5.0デビューしました。
そこでEdgeのWebDriverを自動で更新するPythonのスクリプトをCopilot先生に書いてもらいました。
(一部手で修正)
基本的にKouichiさんの投稿の二番煎じですが、バッチファイルをスタートアップに置けない環境の人などには使えるかもしれません。
https://winactor.com/questions/?p=116382
バグ報告や修正案などは随時どうぞ。
一応、注意点として
①Cドライブ直下に一瞬だけtempedgewdというフォルダを作成します。終わったら削除されます。
万が一同名のフォルダを作成している場合は注意してください。
また、Cドライブ直下へのフォルダ作成が禁止されている場合はtemp_folderの値を変えてください。
②WinActorの自動更新動作と合わせて、ダウンロードするwebdriverは32ビット版です。
(本来はブラウザのビット数に合わせてwebdriverのビット数を決めるのが自然じゃないのかと思いますが、
なぜかWinActorは32ビット版で更新しようとします。
互換性があるから問題ないという判断なのでしょう、きっと。)
③Edgeのインストールフォルダは環境によって変わります。
それぞれの環境に合わせてedge_path = r"C:\Program~の部分を修正していただけると幸いです。
(レジストリからEdgeの実行ファイルの場所を特定する方法も考えましたが未検証)
スクリプトは以下の通り。
import os
import re
import urllib.request
import zipfile
import shutil
import subprocess
import time
def get_edge_version():
edge_path = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
output = subprocess.run(['powershell', '(Get-Item "{}").VersionInfo.ProductVersion'.format(edge_path)], capture_output=True, text=True)
version = output.stdout.strip()
return version
def get_webdriver_version(driver_path):
output = os.popen(f'"{driver_path}" --version').read()
version = re.search(r'(\d+\.\d+\.\d+\.\d+)', output).group(1)
return version
def download_webdriver(version, download_path):
url = f'https://msedgedriver.azureedge.net/{version}/edgedriver_win32.zip'
zip_path = os.path.join(download_path, 'edgedriver.zip')
urllib.request.urlretrieve(url, zip_path)
return zip_path
def extract_zip(zip_path, extract_to):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_to)
os.remove(zip_path)
def main():
edge_version = get_edge_version()
driver_folder = os.path.expanduser("~\Documents\WinActor\webdriver")
temp_folder = r'C:\tempedgewd'
driver_path = os.path.join(driver_folder, 'msedgedriver.exe')
if os.path.exists(driver_path):
webdriver_version = get_webdriver_version(driver_path)
else:
webdriver_version = None
if webdriver_version != edge_version:
# C:\tempedgewdフォルダが存在するかをチェックし、存在しない場合は作成する
if not os.path.exists(temp_folder):
os.makedirs(temp_folder)
zip_path = download_webdriver(edge_version, temp_folder)
extract_zip(zip_path, temp_folder)
# C:\tempedgewdフォルダ内からmsedgedriver.exeを探し、driver_folderにコピーする
for root, dirs, files in os.walk(temp_folder):
if 'msedgedriver.exe' in files:
shutil.copy(os.path.join(root, 'msedgedriver.exe'), driver_folder)
break
# C:\tempedgewdフォルダを削除する
shutil.rmtree(temp_folder)
if __name__ == "__main__":
main()