admin 管理员组文章数量: 887021
自动获取谷歌版本,并自动下载对应版本的chromedriver.exe
- 前言
- 依赖包安装
- 代码内容
- 驱动自动下载逻辑说明
前言
问题:google浏览器频繁更新自动升级、同事使用的Google浏览器版本不一致,需要手动去下载驱动,非常的无语。本着碰到问题就解决问题的心态,写一个自动下载驱动的方法,后来发现了一个驱动管理包非常实用,分享给大家。
当前方法只适配了Windows上的驱动,其它系统和浏览器可以自己修改配置信息适配一下。废话不多说直接上代码。
依赖包安装
python -m pip install -i https://mirrors.aliyun/pypi/simple webdriver-manager==4.0.1
代码内容
# coding:utf-8
import json
import os
import re
# python -m pip install -i https://mirrors.aliyun/pypi/simple webdriver-manager==4.0.1
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager
def get_driver_path(driver_name: str = 'chromedriver') -> str:
"""
获取驱动路径,如果没有、版本与安装的浏览器版本不一致则自动更新下载,有的话获取缓存的驱动
:param driver_name: 浏览器名称,值如下:
chromedriver 谷歌驱动
edgedriver edge 驱动
geckodriver 火狐驱动
:return: 浏览器驱动路径
"""
driver_names = {
'chromedriver': {
'query': r'reg query "HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon" /v version',
'class': ChromeDriverManager,
},
'edgedriver': {
'query': r'reg query "HKEY_CURRENT_USER\Software\Microsoft\Edge\BLBeacon" /v version',
'class': EdgeChromiumDriverManager,
},
'geckodriver': {
'query': r'reg query "HKEY_LOCAL_MACHINE\SOFTWARE\mozilla\Mozilla" /v CurrentVersion',
'class': GeckoDriverManager,
},
}
if driver_name in driver_names:
local_verinfo = os.popen(driver_names[driver_name]['query']).read().strip()
browser_verinfo = re.compile(r' ([0-9]+)\.[0-9]+').findall(local_verinfo)
if len(browser_verinfo) < 1:
print(f'获取本地 {driver_name} 浏览器版本失败:{local_verinfo}')
# 获取本地浏览器驱动缓存路径
drivers_path = os.path.join(os.path.expanduser("~"), '.wdm/drivers.json')
ver_path = ''
if os.path.isfile(drivers_path):
with open(drivers_path, 'r') as file:
data = json.load(file)
for i in [k for k in data]:
cache_ver = re.compile(driver_name + r'.*_for_([0-9]+)\.').findall(i)
if len(cache_ver) == len(browser_verinfo) == 1 and cache_ver[0] == browser_verinfo[0]:
ver_path = data[i]['binary_path']
return driver_names[driver_name]['class']().install() if ver_path == '' else ver_path
else:
raise ValueError(f'{driver_name} 驱动暂不支持')
驱动自动下载逻辑说明
- 本地不存在驱动,自动获取当前安装的浏览器(浏览器存在)版本,并下载跟本地浏览器版本匹配的浏览器驱动,例如:chrome_driver。
- 本地存在驱动(或多个),优先获取本地已下载的驱动版本和本地浏览器版本进行比较,不一致则会重新下载最新的驱动。
- 本地存在驱动(或多个),优先获取本地已下载的驱动版本和本地浏览器版本进行比较,版本一致且多个同一版本的驱动则取本地最新下载的驱动路径。
- 优先取本地驱动的原因:例如重复调用google驱动下载类影响启动浏览器的效率,且容易封ip(亲测),最重要的是太慢了。
- 只适配了window,其他平台未适配,如有需要欢迎留言;如果查询本地浏览器版本的bat命令无效,则需要自己改一下query的内容。
本文标签: 版本 浏览器 测试 selenium chromedriver
版权声明:本文标题:selenium 自动化测试【自动下载谷歌驱动】自动获取安装的谷歌版本,并自动下载对应版本的chromedriver.exe和其他浏览器启动 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1727389325h1113139.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论