概要
WebDriver for EdgeでRPAを利用していたら、ブラウザの自動更新が行われてしまった事でエラーが発生ことに悩まされましたことがあります。PythonでEdge Driverをダウンロードモジュールを作成しました。
開発環境
OS: Windows
Pythonバージョン:3.8.2
IDE: PyCharm Community Edition 2022.3
ソース
以下のソースを作成しました。
import requests
from bs4 import BeautifulSoup
import zipfile
import os
def download_file(target_url, filepath, dest_path):
with requests.get(target_url, stream=True) as response:
with open(filepath, 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
# ダウンロードしたZIPファイルを解凍
with zipfile.ZipFile(filepath, 'r') as zip_ref:
zip_ref.extractall(dest_path)
# ZIPファイルを削除
os.remove(filepath)
class DownloadEdgeDriver(object):
def __init__(self, url = 'https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/'):
self.target_url = url
def __analyse_edge_driver_version(self,html_content):
dict_version_urllinkinfos = {}
# BeautifulSoupを使用してHTMLを解析
soup = BeautifulSoup(html_content, "html.parser")
# バージョンの取得
version = soup.select_one(".block-web-driver__versions strong").next_sibling.strip()
# ダウンロード用URLの取得
download_links = soup.select(".block-web-driver__version-links a")
download_urls = {link.text.strip(): link['href'] for link in download_links}
for platform, url in download_urls.items():
dict_version_urllinkinfos[platform] = url
return version, dict_version_urllinkinfos
def __extract_edge_webdriver_list(self):
# Microsoft Edge WebDriverのダウンロードページURL
# ページのHTMLを取得
response = requests.get(self.target_url)
html_content = response.text
# BeautifulSoupを使用してHTMLを解析
soup = BeautifulSoup(html_content, "html.parser")
# WebDriverのバージョン一覧を取得
version_dl_list = []
for option in soup.select(".block-web-driver__versions"):
#version_info = option.text.strip()
version, dict_urllinkinfos = self.__analyse_edge_driver_version( str(option) )
dict_iteminfo = {}
dict_iteminfo["version"] = version
dict_iteminfo["url_link"] = dict_urllinkinfos
version_dl_list.append(dict_iteminfo)#[ version ] = dict_urllinkinfos
return version_dl_list
def download_Stable_version(self, platform = 'x64', dest_path = '/opt'):
version_dl_list = self.__extract_edge_webdriver_list()
dict_dl_info = version_dl_list[0]
version = dict_dl_info["version"]
#Linux, Mac, Mac M1, x64, x86,ARM64
dl_urllink = dict_dl_info["url_link"][platform]
try:
driver_file_name = 'edgedriver.zip'
download_path = f'{dest_path}/{driver_file_name}' # chromedriver_path.with_name("chromedriver.zip")
# ChromeDriverをダウンロード
#with requests.get(chromedriver_url, stream=True) as response:
download_file( dl_urllink, download_path, dest_path )
except Exception as e:
print(e)
def download(self, version, platform='x64', dest_path='/opt'):
version_dl_list = self.__extract_edge_webdriver_list()
dict_dl_info = [ item if item["version"] == version else None for item in version_dl_list ]
version = dict_dl_info["version"]
# Linux, Mac, Mac M1, x64, x86,ARM64
dl_urllink = dict_dl_info["url_link"][platform]
try:
driver_file_name = 'edgedriver.zip'
download_path = f'{dest_path}/{driver_file_name}' # chromedriver_path.with_name("chromedriver.zip")
# ChromeDriverをダウンロード
# with requests.get(chromedriver_url, stream=True) as response:
download_file(dl_urllink, download_path, dest_path)
except Exception as e:
print(e)
#download eg_webdriver
platform = 'x64'
dest_path = '/temp'
DownloadEdgeDriver().download_Stable_version(platform, dest_path )
## 補足
Windows上で、次のテストコードを使用して動作を確認しました。
platform = 'x64'
dest_path = '/temp'
DownloadEdgeDriver().download_Stable_version(platform, dest_path )
その結果、C:\tempのディレクトリにmsedgedriver.exeファイルがダウンロードされました。