ローカルブラウザのバージョンに応じてChromedriverを自動的に更新します

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/folderwebdriver-managerChromeDriver がダウンロードされ、このパスに保存されます。フォルダーが存在しない場合は、自動的に作成されます

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))

おすすめ

転載: blog.csdn.net/bigcarp/article/details/130485132