Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe

这篇具有很好参考价值的文章主要介绍了Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人经常使用到selenium来控制浏览器进行相关的操作,但是Chrome浏览器经常会自动更新,导致已有的驱动程序chromedriver.exe失效,需要重新下载。

以前尝试过禁止Chrome浏览器更新,但是这并不是很好的解决方案。

于是换了个方向,既然Chrome浏览器会自动更新,那么在我使用selenium控制浏览器时,也进行自动更新驱动程序。

官方下载速度太慢,这里使用的是淘宝NPM镜像地址:CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=chromedriver/

首先通过selenium尝试启动Chrome浏览器,如果异常再做对应的处理,就当前项目主要有两个异常:

  1. 驱动文件不存在:

    selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.

  2. 驱动文件与当前浏览器不兼容:

    selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 101 Current browser version is 113.0.5672.64 with binary path C:\Program Files\Google\Chrome\Application\chrome.exe

然后根据对应的异常捕获本地已安装的Chrome浏览器的版本,然后进行下载/更新

Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe

驱动程序chromedriver.exe版本号一般为4个字段(113.0.5672.24),使用正则匹配前3个字段,最后一位使用最小的版本号

Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe

 最后拼接对应版本号驱动程序的下载链接,下载并解压驱动文件,完成自动下载/更新操作。

Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe

 完整代码:文章来源地址https://www.toymoban.com/news/detail-487901.html

import os
import re
import sys
import winreg
import requests
from zipfile import ZipFile
from selenium import webdriver
from selenium.common.exceptions import WebDriverException, SessionNotCreatedException


def download_webdriver(driver_version):
    """
    下载更新驱动\n
    驱动下载网址:https://registry.npmmirror.com/binary.html?path=chromedriver/
    """
    # 获取驱动列表
    version_list = requests.get("https://registry.npmmirror.com/-/binary/chromedriver/").json()
    version_list = [version["name"] for version in version_list]
    # 获取符合的驱动版本号
    target_version = driver_version.rsplit(".", 1)[0]  # 112.0.5615.28 >>> 112.0.5615
    for version in version_list:
        result = re.match(f"{target_version}.\d+", version)
        if result != None:
            target_version = result.group(0)
    print(f"目标驱动程序版本: {target_version}")
    # 下载驱动压缩包
    download_url = f"https://cdn.npmmirror.com/binaries/chromedriver/{target_version}/chromedriver_win32.zip"
    res = requests.get(download_url, stream=True)
    file_size = int(res.headers.get('Content-Length'))  # 获取文件总大小(字节)
    file_size_MB = file_size / 1024 / 1024
    with open('./chromedriver_win32.zip', 'wb') as fwb:
        n = 1
        for chunk in res.iter_content(int(file_size / 10) + 1):   # 每次遍历的块大小
            fwb.write(chunk)
            schedule = "████" * n + "    " * (10 - n)
            print(f"进度: {10*n}% |{schedule}| {(file_size_MB/10)*n:.2f}MB/{file_size_MB:.2f}MB", end='\r')
            n += 1
    # 解压驱动压缩包
    with ZipFile("./chromedriver_win32.zip") as file:
        file.extract("chromedriver.exe", ".")
    os.remove("./chromedriver_win32.zip")
    print("\n下载/更新完成!")


def create_webdriver(options=None):
    """
    判断浏览器驱动是否正常\n
    return:浏览器驱动对象
    """
    while True:
        try:    # 判断驱动是否正常
            driver = webdriver.Chrome(options=options)
            return driver
        except SessionNotCreatedException as msg:   # 驱动与浏览器版本不一致
            driver_version = re.search("Chrome version (\d+)", str(msg)).group(1)
            chrome_version = re.search("Current browser version is ([\d.]+) with", str(msg)).group(1)
            print(f"SessionNotCreatedException: 浏览器版本与驱动程序不兼容,浏览器({chrome_version}),当前驱动程序({driver_version})\n正在更新驱动程序...")
            download_webdriver(chrome_version)
        except WebDriverException as msg:   # 缺少驱动文件
            # 获取本机Chrome浏览器的版本
            key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Google Chrome')
            chrome_version = winreg.QueryValueEx(key, 'DisplayVersion')[0]    # Version
            print(f"WebDriverException: 缺少浏览器对应的驱动程序,浏览器({chrome_version})\n正在下载驱动程序...")
            download_webdriver(chrome_version)
        except Exception as msg:
            print(msg)
            sys.exit(1)


if __name__ == "__main__":
    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-logging'])

    driver = create_webdriver(options)
    print(111)
    driver.quit()

到了这里,关于Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python selenium自动化操作Chrome浏览器

    ​ ​ 活动地址:CSDN21天学习挑战赛 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持目前比较主流的浏览器。它也实现了诸多自动化功能,比如软件自动化测试,检测软件与浏览器兼容性,自动录制、生成不同语言

    2024年02月02日
    浏览(54)
  • 解决selenium打开Chrome浏览器自动退出的问题

    好不容易安装好selenium和对应的浏览器驱动器后终于可以运行程序了,结果发现一运行程序后浏览器打开就自动退出了,但是我在Python代码中并没有写driver.quit()方法,上网查了查发现原来是我的selenium版本是4.8.2的,selenium升级到版本4.7.2后,会出现这个浏览器自动退出的问题

    2024年02月11日
    浏览(69)
  • 使用Selenium控制Chrome浏览器 --工作自动化

    使用Selenium控制Chrome浏览器 --工作自动化 最近朋友在用秒账做帐时,由于销售单量很大,重复录入工作一天一录就近五个小时,寻求帮助,问能不能把这重复劳动减少些,看后分析,使用web自动化,应能解决问题,特此记录如下:  Selenium 简介:Selenium 是一套完整的web应用程

    2024年02月01日
    浏览(65)
  • 使用selenium,但chrome无法启动,需要安装浏览器对应版本(最新)的chromedriver

    使用selenium无法启动chrome,代码 报错如下: 安装地址 查询了浏览器版本:117.0.5927 但是国内的镜像网找不到,只更新到114版本 需要安装驱动,点击了最下面的网址 https://chromedriver.chromium.org/home 如图为有效信息 - 点击跳转: https://googlechromelabs.github.io/chrome-for-testing (点击这里

    2024年02月11日
    浏览(67)
  • chrome.exe版本不对selenium进行爬虫时无法启动谷歌浏览器

    问题描述:由于谷歌浏览器升级,导致谷歌驱动chrome.exe版本不对,使用selenium进行爬虫时无法启动谷歌浏览器。  解决方法:1. 在谷歌浏览器的设置下,查看浏览器的Chrome版本号。  2. 进入CNPM Binaries Mirror网页,下载对应版本的谷歌驱动器。本文的浏览器是103.0.5060.53,故下载

    2024年02月12日
    浏览(62)
  • Python+Selenium程序执行完,chrome浏览器自动关闭解决方案

    因为把driver = webdriver.Chrome()放在了函数内部,在函数执行完毕之后,程序内所有的步骤都结束了,关于这段程序的进程也就结束了,浏览器包含在内,所以才会自动退出。 设置全局变量,即把打开浏览器的操作放在函数外部,函数执行完毕,浏览器就不会关闭 关闭浏览器代

    2024年02月16日
    浏览(76)
  • java + Selenium 实现自动化测试,模拟人手点击操作 chrome 浏览器

    引入 maven 依赖: 安装 chromeDriver:略 SeleniumUtils.java: ChromeDriverUtils.java: 使用示例:

    2024年02月11日
    浏览(54)
  • chrome浏览器版本和Chromedriver不匹配问题解决办法selenium.common.exceptions.SessionNotCreatedException

    执行selenium抓取的时候,报下面错误: 这是因为浏览器的版本和Chromedriver的版本不匹配,Chrome浏览器如果没有关闭自动更新,会一直出现这个问题,比较麻烦,建议关闭Chrome浏览器自动更新,参照另外一篇文章:Chrome浏览器关闭自动更新 谷歌镜像版本下载链接:https://regist

    2024年02月16日
    浏览(50)
  • Selenium4.6版本浏览器自动退出问题

    打开百度后chrome浏览器就关闭掉了 代码的控制台并无任何报错 正常应该保留的 python 3.10.8 pycharm 2021.2.3 chrome 107.0.5304.122 chromedriver 107.0.5304.18 selenium 4.6.1 这个问题在之前的版本中几乎没遇到过,这一期的学员很多都反馈有该问题,推测应该是新版本导致的 python 没有变化,排除

    2024年02月02日
    浏览(49)
  • selenium4.15.2 报错Exception managing chrome: error sending request for url 和 打开Chrome浏览器自动退出问题

    最近更新了一不小心更新了selenium4.15.2,导致每次运行它都会主动去国外官网请求一遍,因为访问不了国外网址,就加载特别慢 最后报错 Exception managing chrome: error sending request for url (https://chromedriver.storage.googleapis.com/index.html),然后再运行,一开始以为是webdriver版本和chrome版本

    2024年02月05日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包