webdriver-manager
は、ChromeDriver、GeckoDriver、EdgeDriver、IEDriver などの Webdriver ドライバーを自動的にダウンロードして管理できる Python ライブラリです。
このライブラリの主な目的は、開発者がさまざまなオペレーティング システムやブラウザで Selenium テスト スクリプトを実行できるようにし、ドライバーを手動でダウンロードしてインストールする手間を回避することです。を使用するとwebdriver-manager
、開発者は次のことが可能になります。
- WebDriver ドライバー バイナリの自動ダウンロードと更新。
- WebDriver ドライバーのバージョンを管理します。
- 複数のブラウザーやオペレーティング システム間でテスト環境を簡単に切り替えることができます。
を使用すると、webdriver-manager
ドライバーのバージョンがブラウザーのバージョンと一致することが保証されるため、テスト スクリプトをより確実かつ安定して実行できます。さらに、このライブラリは、テスト環境のセットアップとメンテナンスのコストを削減し、テスト スクリプトの再現性と移植性を向上させるのに役立ちます。
を使用した例を次に示しますwebdriver-manager
。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
この例では、[ローカル ブラウザと互換性のある]webdriver-manager
ChromeDriver の最新バージョンを自動的にダウンロードしてインストールし、それを使用して Chrome ブラウザを起動します。
特定のバージョンの WebDriver を使用する必要がある場合は、バージョン番号を指定して使用できます。たとえば、次のコードを使用して ChromeDriver の特定のバージョンをインストールできます。
from webdriver_manager.chrome import ChromeDriverManager
# 安装 ChromeDriver 94.0.4606.41
driver_path = ChromeDriverManager(version='94.0.4606.41').install()
この例では、version
パラメータを使用して、インストールする ChromeDriver のバージョン番号を指定します。このパラメータには、特定のバージョン番号、またはバージョンの範囲94.*
を指定できます。
webdriver-manager
ローカル ブラウザのバージョンを確認して、ダウンロードした WebDriver ドライバがローカル ブラウザのバージョンと互換性があることを確認してください。具体的には、ローカル ブラウザのバージョン情報を読み取り、利用可能な WebDriver ドライバーのバージョンと照合し、最も近いバージョンを選択してローカルにダウンロードします。
ローカル ブラウザのバージョンが古い場合は、webdriver-manager
互換性のある最も近いバージョンを選択しようとします。
また、相対パスと絶対パスの両方をサポートできる chromedriver のローカル ダウンロードおよび保存パスを簡単に指定することもできます。コード例は次のとおりです。
from webdriver_manager.chrome import ChromeDriverManager
ChromeDriverManager(path = r".\\Drivers").install()
webdriver-manager を使用する場合、ドライバーの保存パスを指定するにはどうすればよいですか?
この例では、path
パラメータを使用して ChromeDriver の保存パスを指定し/path/to/driver/folder
、webdriver-manager
ChromeDriver がダウンロードされ、このパスに保存されます。フォルダーが存在しない場合は、自動的に作成されます。
from webdriver_manager.chrome import ChromeDriverManager
driver_path = ChromeDriverManager(path='/path/to/driver/folder').install()
webdriver-manager を使用する場合、イメージのダウンロード元の URL を指定するにはどうすればよいですか?
from webdriver_manager.chrome import ChromeDriverManager
url="https://registry.npmmirror.com/-/binary/chromedriver"
latest_release_url="https://registry.npmmirror.com/-/binary/chromedriver/LATEST_RELEASE"
driver_path = ChromeDriverManager(url=url, latest_release_url=latest_release_url).install()
==================
Firefoxの使用法
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("https://www.baidu.com/")
エッジの使用法
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
driver = webdriver.Edge(EdgeChromiumDriverManager().install())
driver.get("https://www.baidu.com/")
オペラの使用法
from selenium import webdriver
from webdriver_manager.opera import OperaDriverManager
driver = webdriver.Opera(executable_path=OperaDriverManager().install())
driver.get("https://www.baidu.com/")
=========================
知りませんでしたwebdriver-manager之前,我用过的自动更新脚本如下:
# -*- coding: utf-8 -*-
import os
import requests
import winreg
import zipfile
url = 'http://npm.taobao.org/mirrors/chromedriver/'
# chromedriver download link
def get_Chrome_version():
'''查询系统内的Chrome【浏览器的版本】'''
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Google\Chrome\BLBeacon')
version, types = winreg.QueryValueEx(key, 'version')
return version
def get_version(file_path):
'''查询系统内的Chromedriver【驱动的版本】'''
outstd2 = os.popen(file_path+'chromedriver --version').read()
return outstd2.split(' ')[1]
def get_server_chrome_versions(): # 获服务器上当前的Chromedriver的版本(返回是列表)
'''return all versions list'''
versionList = []
url = "https://registry.npmmirror.com/-/binary/chromedriver/"
rep = requests.get(url).json()
for item in rep:
versionList.append(item["name"])
return versionList
def download_driver(download_url):
'''下载文件'''
file = requests.get(download_url)
with open("chromedriver.zip", 'wb') as zip_file: # 保存文件到脚本所在目录
zip_file.write(file.content)
print('下载成功')
def unzip_driver(path):
'''解压Chromedriver压缩包到指定目录'''
f = zipfile.ZipFile("chromedriver.zip", 'r')
for file in f.namelist():
f.extract(file, path)
def check_update_chromedriver(file_path): # 如果有版本号完全一致的,就直接下载对应版本的驱动,否则只匹配主版本号就可以了。
chromeVersion = get_Chrome_version()
chrome_main_version = int(chromeVersion.split(".")[0]) # chrome主版本号
driver_main_version=''
if os.path.exists(os.path.join(file_path,"chromedriver.exe")):
driverVersion = get_version(file_path)
driver_main_version = int(driverVersion.split(".")[0]) # chromedriver主版本号
download_url = ""
if driver_main_version != chrome_main_version:
print("chromedriver版本与chrome浏览器不兼容,更新中>>>")
versionList = get_server_chrome_versions()
if chromeVersion in versionList: # 如果有版本号完全一致的,就直接下载对应版本的驱动,否则只匹配主版本号就可以了。
download_url = f"{url}{chromeVersion}/chromedriver_win32.zip"
else:
for version in versionList:
if version.startswith(str(chrome_main_version)): # 检查版本号开头的字符,如果与主版本号相同,就返回对应的驱动URL
download_url = f"{url}{version}/chromedriver_win32.zip"
break
if download_url == "":
print("暂无法找到与chrome兼容的chromedriver版本,请在http://npm.taobao.org/mirrors/chromedriver/ 核实。")
download_driver(download_url=download_url)
path = file_path
unzip_driver(path)
os.remove("chromedriver.zip")
print('更新后的Chromedriver版本为:', get_version(file_path))
else:
print("chromedriver版本与chrome浏览器相兼容,无需更新chromedriver版本!")
return os.path.join(file_path,"chromedriver.exe")
if __name__ == "__main__":
file_path="C:\webdrivers\\" # 我电脑的环境变量path设置的驱动目录是"C:\webdrivers\"
print(check_update_chromedriver(file_path))