一、喜大普奔,为了解决开发者更新chromedriver的痛苦,谷歌官方已经提供不会自动更新的安装包了:https://googlechromelabs.github.io/chrome-for-testing/
另,如果镜像服务器没有最新chromedriver版本,在上述网址也能找到!!
ChromeDriver下载页面(114之前ChromeDriver驱动版本)
淘宝镜像:https://registry.npmmirror.com/binary.html?path=chromedriver/ CNPM Binaries Mirror
官方镜像: https://sites.google.com/a/chromium.org/chromedriver/downloads
ChromeDriver下载页面(115以后ChromeDriver驱动版本)
官网: Chrome for Testing availability
国内镜像: CNPM Binaries Mirror https://registry.npmmirror.com/binary.html?path=chrome-for-testing/
二、
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/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/")
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))