当前位置:   article > 正文

selenium 自动化测试【自动下载谷歌驱动】自动获取安装的谷歌版本,并自动下载对应版本的chromedriver.exe和其他浏览器启动_自动下载selenium驱动

自动下载selenium驱动

自动获取谷歌版本,并自动下载对应版本的chromedriver.exe

前言

问题:google浏览器频繁更新自动升级、同事使用的Google浏览器版本不一致,需要手动去下载驱动,非常的无语。本着碰到问题就解决问题的心态,写一个自动下载驱动的方法,后来发现了一个驱动管理包非常实用,分享给大家。
当前方法只适配了Windows上的驱动,其它系统和浏览器可以自己修改配置信息适配一下。废话不多说直接上代码。

依赖包安装

python -m pip install -i https://mirrors.aliyun.com/pypi/simple webdriver-manager==4.0.1
  • 1

代码内容

# coding:utf-8 

import json
import os
import re
# python -m pip install -i https://mirrors.aliyun.com/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.org\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} 驱动暂不支持')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

驱动自动下载逻辑说明

  1. 本地不存在驱动,自动获取当前安装的浏览器(浏览器存在)版本,并下载跟本地浏览器版本匹配的浏览器驱动,例如:chrome_driver。
  2. 本地存在驱动(或多个),优先获取本地已下载的驱动版本和本地浏览器版本进行比较,不一致则会重新下载最新的驱动。
  3. 本地存在驱动(或多个),优先获取本地已下载的驱动版本和本地浏览器版本进行比较,版本一致且多个同一版本的驱动则取本地最新下载的驱动路径。
  4. 优先取本地驱动的原因:例如重复调用google驱动下载类影响启动浏览器的效率,且容易封ip(亲测),最重要的是太慢了。
  5. 只适配了window,其他平台未适配,如有需要欢迎留言;如果查询本地浏览器版本的bat命令无效,则需要自己改一下query的内容。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/925987
推荐阅读
相关标签
  

闽ICP备14008679号