3

先日ようやくバージョンアップを行い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()

茄子天 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。