app开发定制python一招完美搞定Chromedriver的自动更新

🚀 app开发定制优质资源分享 🚀

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

日常的webapp开发定制自动化过程中,我们常常用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淘宝的镜像仓库:。其访问和下载速度很快,仅有如下几个缺点:
1、数据更新会比谷歌官方稍慢;
2、可供下载的版本有时不全;
3、网站域名和界面有时会变化,这间接影响到了自动下载的方法。
 
其网站界面如下:

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

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

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

# selenium 4
  • 1
from webdriver\_manager.chrome import ChromeDriverManagerfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicedriver\_path=ChromeDriverManager().install() #下载latest release版本的chromedriver,并返回其在本机的下载存储路径driver = webdriver.Chrome(service=Service(driver\_path)) 
  • 1
  • 2
  • 3
  • 4
  • 5

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

import loggingimport osos.environ['WDM\_LOG'] = str(logging.NOTSET)
  • 1
  • 2
  • 3
  • 4

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

from webdriver\_manager.chrome import ChromeDriverManagerChromeDriverManager(path = r".\\Drivers").install()
  • 1
  • 2
  • 3

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

from webdriver\_manager.chrome import ChromeDriverManagerChromeDriverManager(version="106.0.5249.21").install()
  • 1
  • 2
  • 3

这里引出了真正的问题,假使我们本机上使用的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\_osfrom webdriver\_manager.chrome import ChromeDriverManagerimport requests,re,time,osbrowserVersion=get\_browser\_version\_from\_os("google-chrome") # 获取当前系统chrome浏览器的版本号mainBrowserVersion=browserVersion.split(".")[0] # 获取浏览器的主版本号resp=requests.get(url="https://chromedriver.storage.googleapis.com/")content=resp.textavailableVersionList=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下载使用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发