python一招完美搞定Chromedriver的自动更新问题

 更新时间:2022年09月16日 08:20:16   作者:NewJune  
这篇文章主要介绍了python一招完美搞定Chromedriver的自动更新,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  日常的web自动化过程中,我们常常用python selenium库来操纵Chrome浏览器实现网页的自动化。这其中有个比较头疼的问题:Chrome的更新频率非常频繁,与之对应的Chromedriver版本也必须相应更新。如果两者版本的主版本号相差超过1,selenium则会报异常,大概错误信息如下:

发生异常: SessionNotCreatedException

Message: session not created: This version of ChromeDriver only supports Chrome version 95 Current browser version is 105.0.5195.102 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

  那有没有好的办法解决这个问题呢?方法当然有,首先我们需要知道哪里可以下载到不同版本的Chromedriver文件。这里推荐两个网站,国内首选chromedriver淘宝的镜像仓库:http://npm.taobao.org/mirrors/chromedriver/。其访问和下载速度很快,仅有如下几个缺点:

1、数据更新会比谷歌官方稍慢;

2、可供下载的版本有时不全;

3、网站域名和界面有时会变化,这间接影响到了自动下载的方法。

其网站界面如下:

  如果希望稳定获取对应版本的chromedriver,这里更加推荐谷歌官方的源仓库(莫慌张,该域名在国内可以正常访问),网址为:https://chromedriver.storage.googleapis.com/index.html。界面与淘宝镜像仓库的别无二致:

  那么问题来了,如何让python脚本自动帮我们下载和更新chromedriver,使其与chrome浏览器版本相一致呢?这就体现出python第三方库遍地开花的优势了。webdriver-manager库,没错,我们只需要通过pip installwebdriver-manager来安装该三方库。通过库名也不难看出,该工具可以有效管理主流浏览器所需的webdriver:chrome、Edge、chromium、firefox、IE、Opera的支持都不在话下。本文以chrome来举例。

假设我们Chrome总是自动更新至最新版,我们自然每次使用selenium前需要确保chromedriver处于最新版(latest_release),此时我们只需要寥寥几行代码即可搞定:

# selenium 4
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
driver_path=ChromeDriverManager().install() #下载latest release版本的chromedriver,并返回其在本机的下载存储路径
driver = webdriver.Chrome(service=Service(driver_path)) 

  有了这段脚本webdriver-manager会灰常贴心地自动检查本地缓存路径,确认有无该版本的chromedriver,如果确认没有,它才会联网下载最新版本的chromedriver,控制台中还会显示下载速度和进度,极其用心。如果我们觉得webdriver的日志多余,官方也提供了方法供我们关闭相关日志,代码如下:

import logging
import os

os.environ['WDM_LOG'] = str(logging.NOTSET)

  我们还可以方便地指定chromedriver的本地下载和保存路径,它既可以支持相对路径,也可以支持绝对路径的写法,代码示例如下:

from webdriver_manager.chrome import ChromeDriverManager
ChromeDriverManager(path = r".\\Drivers").install()

  如果我们希望下载指定版本的chromedriver,可以给上面的ChromeDriverManager实例传入version参数,代码示例如下:

from webdriver_manager.chrome import ChromeDriverManager

ChromeDriverManager(version="106.0.5249.21").install()

  这里引出了真正的问题,假使我们本机上使用的chrome不是最新版,我们又该如何去实现自动更新chromedriver呢?这就是小爬在本文中要重点解决的问题:

细细思考后不难看出,我们只需要分以下几个步骤来实现:

1、自动获取当前电脑的chrome浏览器版本;

2、提取浏览器版本的主版本号,如chrome版本为106.0.5249.21,那么其主版本号就是”106“;

3、利用requests库请求chromedriver的镜像仓库,解析返回的html源码,获得每个版本的chromedriver链接;

4、从步骤3获得的所有下载链接中,找到主版本与chrome一致的,从中随意取出一个即可满足要求(我们不妨取出第一个满足要求的chromedriver版本);

5、将该版本号传入ChromeDriverManager实例,即可下载使用对应的chromedriver。

  小爬直接带着各位童鞋开整啦,下面全是干货。示例代码如下:

from webdriver_manager.core.utils import get_browser_version_from_os

from webdriver_manager.chrome import ChromeDriverManager
import requests,re,time,os

browserVersion=get_browser_version_from_os("google-chrome") # 获取当前系统chrome浏览器的版本号
mainBrowserVersion=browserVersion.split(".")[0] # 获取浏览器的主版本号
resp=requests.get(url="https://chromedriver.storage.googleapis.com/")
content=resp.text
availableVersionList=re.search(f"<Contents><Key>({mainBrowserVersion}\.\d+\.\d+\.\d+)/chromedriver_win32\.zip</Key>.*?",content,re.S)
if availableVersionList==None:
    print(f"镜像网站上没有找到主版本号为{mainBrowserVersion}的chromedriver文件,请核实!")
    time.sleep(10)
    os._exit(0)
else:
    availableVersion=availableVersionList.group(1)
driver_path=ChromeDriverManager(version=availableVersion).install() # 找到镜像网站中主版本号与chrome主版本一致的,将匹配到的第一个完整版本号的chromedriver下载使用

  有了这段代码,chromedriver与chrome版本同步的问题,就再也不会困扰屏幕前的你了!(●'◡'●)

到此这篇关于python一招完美搞定Chromedriver的自动更新的文章就介绍到这了,更多相关python Chromedriver自动更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python演示解答正则为什么是最强文本处理工具

    python演示解答正则为什么是最强文本处理工具

    正则表达式又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本,它是最强的文本处理工具,至于原因本文将给你答案
    2021-09-09
  • pytorch多进程加速及代码优化方法

    pytorch多进程加速及代码优化方法

    今天小编就为大家分享一篇pytorch多进程加速及代码优化方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 在Pycharm中自动添加时间日期作者等信息的方法

    在Pycharm中自动添加时间日期作者等信息的方法

    今天小编就为大家分享一篇在Pycharm中自动添加时间日期作者等信息的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python对文档中元素删除,替换操作

    python对文档中元素删除,替换操作

    这篇文章主要介绍了python对文档中元素删除,替换操作,pthon更换文档中某元素、python改变或者删除txt文档中某一列元素,下文具体代码实现需要的小伙伴可以参考一下
    2022-04-04
  • pycharm2022.2远程连接服务器调试代码实现

    pycharm2022.2远程连接服务器调试代码实现

    本文主要介绍了pycharm2022.2远程连接服务器调试代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python 异步之在 Asyncio中如何运行阻塞任务详解

    Python 异步之在 Asyncio中如何运行阻塞任务详解

    这篇文章主要为大家介绍了Python 异步之在 Asyncio 中运行阻塞任务示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • pytest实战技巧之参数化基本用法和多种方式

    pytest实战技巧之参数化基本用法和多种方式

    本文介绍了pytest参数化的基本用法和多种方式,帮助读者更好地使用这个功能,同时,还介绍了一些高级技巧,如动态生成参数名称、参数化的组合和动态生成参数化装饰器,帮助读者更灵活地使用参数化,感兴趣的朋友参考下吧
    2023-12-12
  • Pytorch中TensorDataset,DataLoader的联合使用方式

    Pytorch中TensorDataset,DataLoader的联合使用方式

    这篇文章主要介绍了Pytorch中TensorDataset,DataLoader的联合使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 浅谈pytorch中的BN层的注意事项

    浅谈pytorch中的BN层的注意事项

    这篇文章主要介绍了浅谈pytorch中的BN层的注意事项,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python地图四色原理的遗传算法着色实现

    Python地图四色原理的遗传算法着色实现

    大家好,本篇文章主要讲的是Python地图四色原理的遗传算法着色实现,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02

最新评论