自动获取谷歌版本,并自动下载对应版本的chromedriver.exe

  • 前言
    • 获取谷歌版本(获取google版本)
    • 定义下载驱动方法
    • 下载逻辑判断
    • 最后送个小福利

前言

因为电脑google浏览器自动升级,还有就是其他同事使用的Google浏览器版本与自己的不一致,需要重复去下载,所有老是需要重新去下载驱动,很麻烦,所有写了一个自动下载驱动的方法。
当前方法只适配了Windows上的google驱动,其它系统和浏览器可以自己修改适配一下。

获取谷歌版本(获取google版本)

# __*__ coding:utf-8 __*__import os# 获取浏览器版本,windows
chromeV = os.popen('reg query "HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon" /v version').read().strip().split(" ")[-1]

定义下载驱动方法

# __*__ coding:utf-8 __*__import logging
import os
import xml
import zipfile
import requests
from xml.etree import ElementTree
import re
import win32api, win32conPATH = lambda x: os.path.abspath(os.path.join(os.path.dirname(__file__), x))def downloadChromeDriver(chrome_version, platform='win'):"""自动下载谷歌驱动:param chrome_version: 谷歌浏览器版本, 如:106.0.5249.119:param platform: 1.win  2.linux  3.mac"""xmlns = '{http://doc.s3.amazonaws.com/2006-03-01}'url = 'http://chromedriver.storage.googleapis.com/?delimiter=/&prefix='resp = requests.get(url=url)# 读取字符串格式xml数据tree = xml.etree.ElementTree.fromstring(resp.text)CommonPrefixes_list = tree.findall('{}CommonPrefixes'.format(xmlns))for Prefix in CommonPrefixes_list:# 获取所有的驱动文件版本prefix_ = Prefix.findall('{}Prefix'.format(xmlns))[0].textif chrome_version[0:10] == prefix_[0:10]:resp = requests.get('{}{}'.format(url, prefix_))# 版本下各个系统版本谷歌驱动root = xml.etree.ElementTree.fromstring(resp.text)contents = root.findall('{}Contents'.format(xmlns))for con in contents:# print(con.tag)headers = {'Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9'}# 下载驱动# http://chromedriver.storage.googleapis.com/100.0.4896.20/chromedriver_win32.zipif 'Key' in con[0].tag and platform in con[0].text:resp_zip = requests.get(url='http://chromedriver.storage.googleapis.com/'+con[0].text, headers=headers)zipfile_name = con[0].text.split('/')[1]with open(PATH(zipfile_name), 'wb') as zip:zip.write(resp_zip.content)breakelse:return 0# 解压驱动文件并替换zf = zipfile.ZipFile(zipfile_name, 'r')name_list = [item for item in zf.namelist()]for gz_item in name_list:f_data = zf.read(gz_item)with open(PATH("chromedriver.exe"), 'wb') as f:# 保存解压出来的文件f.write(f_data)logging.info('对应谷歌浏览器驱动版本下载成功')zf.close()# 删除zip压缩包文件os.remove(PATH('chromedriver_win32.zip'))return 1else:logging.error('没有找到 {} 版本的驱动。请手动前往下载:{}'.format(chrome_version, url))return 0

下载逻辑判断

1、本地不存在驱动,直接下载
2、存在且版本与浏览器版本匹配,则跳过
3、存在但版本跟浏览器匹配不上,则自动下载

# 如果没有谷歌驱动,自动下载驱动
if not os.path.isfile(PATH("chromedriver.exe")):dret = downloadChromeDriver(chromeV)logging.info('google驱动自动下载成功') if dret == 1 else logging.error('google驱动下载失败!')# 启动浏览器
s = Service(executable_path=PATH("chromedriver.exe"))
options = webdriver.ChromeOptions()
# 禁用日志--因为cmd运行的时候出现日志打印,且展示为乱码
options.add_experimental_option('excludeSwitches', ['enable-logging'])# 方法一:如果驱动有,则尝试使用旧的驱动启动,启动失败则自动下载更新驱动
try:driver = webdriver.Chrome(service=s, options=options)
except Exception as e:logging.info('启动失败当前驱动可能与浏览器不匹配,更新一下驱动\n{}'.format(e))downloadChromeDriver(chromeV)driver = webdriver.Chrome(service=s, options=options)# 方法二:获取驱动的版本,和浏览器版本对比# 获取google驱动版本
chromedriver_version = os.popen(PATH('chromedriver.exe')).read().strip().split(' ')[2]# 如果没有谷歌驱动,自动下载驱动
if chromeV[0:10] != chromedriver_version[0:10]:os.remove('chromedriver.exe')dret = downloadChromeDriver(chromeV)logging.info('当前驱动可能与浏览器版本相差过大,更新驱动成功') if dret == 1 else logging.error('google驱动下载失败!')
else:logging.info('当前驱动与浏览器版本匹配,无需更新驱动')

最后送个小福利

日志可以写入文件的同时还能在终端打印(纯属个人喜好,调试方便)

import logging# 定义日志的格式
logFormat = '%(asctime)s %(filename)s[%(lineno)d] %(levelname)s\t%(message)s'.format('\n'*0)
# 根据日志初始化时间来创建日志文件
logfile = open("logfile.log", encoding="utf-8", mode="a")
# 日志模块初始化
logging.basicConfig(level=logging.INFO, stream=logfile, format= logFormat)
# 实例终端输出日志方法
console = logging.StreamHandler(stream=sys.stdout)
# 设置终端打印的日志等级
console.setLevel(logging.INFO)
# 设置终端打印日志的格式,logFormat上面已定义
formatter = logging.Formatter(logFormat)
# 设置格式
console.setFormatter(formatter)
# 添加到日志句柄
logging.getLogger('').addHandler(console)

selenium【自动下载谷歌驱动】自动获取谷歌版本,并自动下载对应版本的chromedriver.exe相关推荐

  1. 自动售货机驱动板与android,一种自动售货机的逻辑驱动板的制作方法

    本实用新型涉及自动售货机领域,特别是一种自动售货机的逻辑驱动板. 背景技术: 目前,现有的自动售货机驱动板所有电机的接线均接到一块驱动板上,线束繁多,成本高,安装不便.如果货道多的话,驱动板的MCU的 ...

  2. python selenium安装教程 谷歌驱动_selenium 安装与chromedriver安装的方法步骤

    安装 selenium可以直接可以用pip安装. pip install selenium chromedriver的安装一定要与Chrome的版本一致,不然就不起作用(不要问我是怎么知道的). 有两 ...

  3. java WebDriver + selenium 调用 谷歌驱动 chromedriver 实现 在 liunx 环境下 无界面 截图 加自动获取页面最大真实页面内容高宽 加各类型踩坑日记

    目录 1.介绍 2.结果效果 2.1大图 2.2细节小图 3.依赖 4.代码 4.1引入 4.2具体代码 4.3执行 5.Linux下安装chrome和chromedriver 5.1yum安装 5. ...

  4. Selenium根据Chrome浏览器版本自动下载/更新驱动chromedriver.exe

    个人经常使用到selenium来控制浏览器进行相关的操作,但是Chrome浏览器经常会自动更新,导致已有的驱动程序chromedriver.exe失效,需要重新下载. 以前尝试过禁止Chrome浏览器 ...

  5. 从谷歌和译典通能上自动下载英语单词mp3的好方法

    从谷歌和译典通能上自动下载英语单词mp3的好方法 最近在学英语,很多单词不怎么会读.每次得去iciba.com和dreye.com上查,很是麻烦! 后来一想,能不能写个程序自动下载?测试一番,最终搞定 ...

  6. java+selenium的入门 案例 selenium包 谷歌驱动包 火狐驱动包 IE驱动包 (一)

    目录 前言 selenium是什么? Selenium的下载使用 Selenium下载 Selenium下载地址 Selenium之谷歌驱动包 chromedriver包下载地址 Selenium使用 ...

  7. 爬虫之谷歌驱动下载安装

    第一:.谷歌浏览器下载:谷歌官网:https://www.google.cn/chrome/ 第二:查看浏览器版本 打开谷歌浏览器输入:chrome:version 第三步:阻止谷歌浏览器自动升级(短 ...

  8. Python自动检测Chrome浏览器版本号并下载对应驱动文件[chromedriver.exe]

    说明 实现原理是当使用的chromedriver.exe与当前Chrome浏览器版本不一致时会抛出异常,在异常信息中会包含当前Chrome版本信息和Chrome浏览器安装地址信息,通过捕获异常信息,正 ...

  9. Google谷歌拼音自动升级小秘密(解迷谷歌拼音输入法自动升级)

    导读: <script type="text/javascript"> </script> <script type="text/javas ...

最新文章

  1. 还原淘宝首页最顶部的导航栏(含下拉菜单,图标等)
  2. [C++11]decltype在泛型编程中的使用举例
  3. 从托管到原生,MPP架构数据仓库的云原生实践
  4. android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)
  5. 【转载】正则表达式30分钟入门教程
  6. socket 远程主机强迫关闭了一个现有的连接_Python 之 后门程序编写与远程控制
  7. jQuery LigerUI 插件介绍及使用之ligerTree
  8. Atitit easyui翻页组件与vue的集成解决方案attilax总结
  9. 来自华为创始人演讲的几点感悟,助你新的一年升职加薪
  10. php函数形参,PHP中的函数形参的默认值
  11. 【职场心路】一个老DBA的自白
  12. C语言验证哥德巴赫猜想
  13. maven打包将依赖jar也打包的方法
  14. 网易数据湖探索与实践-范欣欣
  15. 认真的雪歌词的c语言编码,认真的雪歌词
  16. 怎么录制屏幕视频?电脑按哪个键录制屏幕
  17. 【模电—低频学习笔记(一)】信号的频谱
  18. Unbroken——坚不可摧
  19. mysql计算两个日期间的工作时长(参数传入每天上班时间,并剔除周末)
  20. MFC 关于OnPaint绘图的一些经验

热门文章

  1. 【大模型多肽发现、学习笔记】针对病毒感染的肽药物发现
  2. Unity3D之UI设计
  3. ESP32 手册+文档整理
  4. 关于标书文件的书写(一)
  5. BiNE: Bipartite Network Embedding
  6. java互联网FOR面试-数据库-索引
  7. 2020一线互联网大厂面经集——阿里篇「1」
  8. 静态网页的制作(美食美刻)
  9. 零基础html学习-完结
  10. C#中在图片上定位画图以及画文本