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

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

日常的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 install webdriver-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"({mainBrowserVersion}\.\d+\.\d+\.\d+)/chromedriver\_win32\.zip.*?",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版本同步的问题,就再也不会困扰屏幕前的你了!(●’◡’●)

欢迎扫码关注我的公众号 获取更多爬虫、数据分析的知识!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cln7NJt2-1663261886448)(https://files-cdn.cnblogs.com/files/new-june/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.bmp)]

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Chromedriver可以通过使用ChromeDriverManager来自动更新。当我们运行测试用例时,如果检测到Chromedriver未安装或版本较旧,ChromeDriverManager会自动下载并安装匹配的最新版本。这样,我们可以保持Chromedriver与已安装的Chrome浏览器版本同步。 由于Chrome浏览器的版本会更新,所以在进行自动化测试时,Chromedriver也需要更新以确保与最新的Chrome浏览器版本兼容。这样可以确保我们的自动化测试代码在不同的Chrome浏览器版本中都能正常运行。 为了确保我们始终使用最新版本的Chromedriver,我们可以使用以下几行代码实现: ``` from webdriver_manager.chrome import ChromeDriverManager from selenium import webdriver from selenium.webdriver.chrome.service import Service driver_path = ChromeDriverManager().install() # 下载最新版本的Chromedriver并返回其在本机的下载存储路径 driver = webdriver.Chrome(service=Service(driver_path)) ``` 通过以上代码,我们使用ChromeDriverManager下载并安装最新版本的Chromedriver,并将其路径传递给webdriver.Chrome()来创建一个能够与最新版本的Chrome浏览器兼容的webdriver实例。这样就可以确保我们的自动化测试代码始终使用最新版的Chromedriver。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用ChromeDriverManager自动更新Chromedriver](https://blog.csdn.net/weixin_43643587/article/details/125436253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [python完美Chromedriver自动更新](https://blog.csdn.net/u012804784/article/details/126882486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值