自动更新Selenium驱动chromedriver

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

由于谷歌游览器经常自动更新导致selenium驱动失效需要重新下载,如何让代码自动更新selenium驱动的方法呢?

selenium连接谷歌游览器抛出异常时,会展示当前谷歌游览器的版本信息,我们可以到selenium驱动下载的网站获取全部版本信息,然后找个一个匹配的版本进行下载并解压即可。

为了更快的下载速度,这里我选择国内的镜像站:http://npm.taobao.org/mirrors/chromedriver/

它会重定向到:https://registry.npmmirror.com/binary.html?path=chromedriver/

经过开发者工具检查,可以找到获取最新的全部版本信息的接口:https://registry.npmmirror.com/-/binary/chromedriver/

我按照前三个号作为键进行匹配,下载小版本号最大的作为驱动。

最终完整代码为:

from selenium import webdriver
from selenium.common.exceptions import SessionNotCreatedException
import re
import os
import requests
import zipfile
import itertools


def getChromeDriver(options=None):
    """代码作者:小小明-代码实体 xxmdmst.blog.csdn.net"""
    try:
        driver = webdriver.Chrome(options=options)
        return driver
    except SessionNotCreatedException as e:
        driver_version = re.search(
            "Chrome version ([\d.]+)", str(e)).group(1)
        chrome_version = re.search(
            "Current browser version is ([\d.]+) with", str(e)).group(1)
        print(f"驱动版本:{driver_version},谷歌游览器版本:{chrome_version},不兼容\n开始更新驱动...")
        res = requests.get(
            "https://registry.npmmirror.com/-/binary/chromedriver/")
        versions = [obj["name"][:-1] for obj in res.json() if re.match("\d+",
                                                                       obj["name"]) and obj["name"].count(".") == 3]
        versions = {key: max(versions_split, key=lambda x: int(x[x.rfind(".")+1:]))
                    for key, versions_split in itertools.groupby(versions, key=lambda x: x[:x.rfind(".")])}
        dest_version = versions[chrome_version[:chrome_version.rfind(".")]]
        print("驱动将更新到", dest_version)
        file = f"chromedriver_{dest_version}_win32.zip"
        if not os.path.exists(file):
            url = f"https://registry.npmmirror.com/-/binary/chromedriver/{dest_version}/chromedriver_win32.zip"
            print("驱动下载地址:", url)
            res = requests.get(url)
            with open(file, 'wb') as f:
                f.write(res.content)
        else:
            print(file, "文件已经下载到当前目录,下面直接使用缓存解压覆盖...")
        with zipfile.ZipFile(file) as zf:
            zf.extract("chromedriver.exe", ".")
        driver = webdriver.Chrome(options=options)
        return driver


options = webdriver.ChromeOptions()
options.add_experimental_option(
    'excludeSwitches', ['enable-logging', 'enable-automation'])
driver = getChromeDriver(options)
driver.get("https://www.baidu.com/")

驱动不兼容时的打印示例:

驱动版本:100,谷歌游览器版本:102.0.5005.115,不兼容
开始更新驱动...
驱动将更新到 102.0.5005.61
驱动下载地址: https://registry.npmmirror.com/-/binary/chromedriver/102.0.5005.61/chromedriver_win32.zip

上面自己开发的下载方法下载速度相对是比较快的,如果嫌弃代码太长,可以使用webdriver_manager这个库,通过pip可以直接安装:

pip install webdriver_manager

然后执行以下代码即可从 https://chromedriver.storage.googleapis.com自动下载匹配的驱动,并返回下载位置:

from webdriver_manager.chrome import ChromeDriverManager

ChromeDriverManager().install()

打印示例:

[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 102.0.5005
[WDM] - Get LATEST chromedriver version for 102.0.5005 google-chrome
[WDM] - There is no [win32] chromedriver for browser 102.0.5005 in cache
[WDM] - About to download new driver from https://chromedriver.storage.googleapis.com/102.0.5005.61/chromedriver_win32.zip
[WDM] - Driver has been saved in cache [C:\Users\ASUS\.wdm\drivers\chromedriver\win32\102.0.5005.61]
'C:\\Users\\ASUS\\.wdm\\drivers\\chromedriver\\win32\\102.0.5005.61\\chromedriver.exe'

这样我们可以直接通过返回的字符串设置驱动的位置:文章来源地址https://www.toymoban.com/news/detail-699114.html

from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install(), options=None)

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

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

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

相关文章

  • python + selenium 自动下载浏览器驱动文件

    python + selenium 自动下载浏览器驱动文件

    2024年02月02日
    浏览(56)
  • python+selenium自动化测试关键字驱动

    page2

    2024年02月11日
    浏览(48)
  • Python Selenium实现自动化测试及Chrome驱动使用

    本文将介绍如何使用 Python   Selenium 库实现 自动化测试 ,并详细 记录 了Chrome驱动的使用方法。 通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。 并了解如何配置和使用Chrome驱动来实现更高效的自动化测试。 一、Python Selenium简介 Python Selenium是一个用于

    2024年02月03日
    浏览(62)
  • python爬虫,selenium+chromedriver,谷歌驱动自动下载及配置

    关于toollib 我们在使用selenium时,有一件让我们狠抓狂的事,那就是驱动的下载与配置… 为什么这么说呢? 1)首先确定浏览器对应的驱动版本号 2)然后手动下载下来 3)最后配置驱动路径或放在对应的目录下 使用toollib就很方便,这些都内部处理好了。(pip install toollib) 示

    2024年02月16日
    浏览(53)
  • Python Selenium实现自动化测试及Chrome驱动使用!

    本文将介绍如何使用Python Selenium库实现自动化测试,并详细记录了Chrome驱动的使用方法。 通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。 并了解如何配置和使用Chrome驱动来实现更高效的自动化测试。 一、Python Selenium简介 Python Selenium是一个用于Web应用

    2024年03月10日
    浏览(69)
  • selenium 更新 chromedriver 驱动

    selenium 要想使用 chromedriver 驱动,必须版本要正确 在浏览器的导航栏中输入 chrome://version 可以看到当前浏览器版本为 98.0.4758.82 驱动下载地址:http://chromedriver.storage.googleapis.com/index.html 找到对应版本的文件夹进入,点击自己系统的进行下载 其中包含了 linux 、 mac 、 windows 多版

    2024年02月11日
    浏览(45)
  • selenium 遇到更新chorme驱动

    打开浏览器,在地址栏输入chrome://version/便可以查看到谷歌当前的版本号 谷歌浏览器驱动的下载网址  http://chromedriver.storage.googleapis.com/index.html http://chromedriver.storage.googleapis.com/index.html selenium webdriver - Unable to download chrome driver for version 115 - Stack Overflow    Chrome for Testing availabi

    2024年02月14日
    浏览(28)
  • python/selenium中msedgedriver版本自动更新,解决“This version of MSEdgeDriver only supports MSEdge version 100“

    目录 前言 一、如何识别Edge浏览器的版本? 二、自动更新代码 1.引入库 2.构造解压文件函数 3.更新msedgedriver文件

    2024年02月03日
    浏览(75)
  • Selenium 自动化 —— 使用WebDriverManager自动下载驱动

    上一篇文章 入门和 Hello World 实例 中,我们提供了一个最简单的 Selenium 上手的例子。 但是某一天,突然发现相同的代码居然运行报错了。这是怎么回事呢? 日志中其实提示的很明显了:Chrome浏览器和Chrome WebDriver的版本不匹配。当前WebDriver只支持Chrome浏览器版本114. 先检查一

    2024年03月26日
    浏览(54)
  • selenium自动化原理应用 - 利用 requests 模拟 selenium 驱动浏览器

    selenium是一个web自动化测试的开源框架,它支持多语言:python/java/c#… 前面也有一篇文章说明了,selenium+浏览器的环境搭建。 selenium支持多语言,是因为selenium与浏览器驱动之间是通过http协议进行通信的。只关心通信的数据是否能够正确解读 ,并不关心这个数据是从哪个客户

    2024年02月03日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包