热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享python一招完美搞定Chromedriver的自动更新问题

日常的web自动化过程中,我们常常用pythonselenium库来操纵chrome浏览器实现网页的自动化。这其中有个比较头疼的问题:chrome的更新频率非常频繁,与之对应的

  日常的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)googlechromeapplicationchrome.exe

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

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

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

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

其网站界面如下:

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

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

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

  那么问题来了,如何让python脚本自动帮我们下载和更新chromedriver,使其与chrome浏览器版本相一致呢?这就体现出python第三方库遍地开花的优势了。webdriver-manager库,没错,我们只需要通过pip installwebdriver-manager来安装该三方库。通过库名也不难看出,该工具可以有效管理主流浏览器所需的webdriver:chrome、edge、chromium、firefox、ie、opera的支持都不在话下。python教程分享python一招完美搞定Chromedriver的自动更新问题以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呢?这就是小爬在python教程分享python一招完美搞定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版本同步的问题,就再也不会困扰屏幕前的你了!(●'◡'●)

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

需要了解更多python教程分享python一招完美搞定Chromedriver的自动更新问题,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 1.官网下载了mysql-5.7.17-win64.zip包,配置遇到很多麻烦,记录一下;2.解压后放到指定的文件夹,修改mysql-5.7.17的配置文件my-default.i ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
author-avatar
yuyiyin乐悠悠_964
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有