根据本地浏览器的版本自动更新chromedriver

webdriver-manager 是一个 Python 库,它可以自动下载和管理 Webdriver 驱动程序,包括 ChromeDriver、GeckoDriver、EdgeDriver、IEDriver 等

这个库的主要用途是帮助开发者在不同的操作系统和浏览器上运行 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-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/")

Edge用法

from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
 
driver = webdriver.Edge(EdgeChromiumDriverManager().install())
driver.get("https://www.baidu.com/")

  Opera用法

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