前言

chromedriver是Web UI自动化必备的一个谷歌Chrome浏览器的驱动文件,需要和自己电脑上安装的Chrome浏览器版本对应才能正常使用。
经常遇到新手装的Chrome浏览器自动更新了,但是chromedriver没更新,导致原本正常的脚本突然不能用了。
因此想做一个脚本自动下载最新的chromedriver。

代码

 1 import requests
 2 import re
 3
 4 url = 'http://npm.taobao.org/mirrors/chromedriver/'
 5 rep = requests.get(url).text
 6
 7 time_list = []          # 用来存放版本时间
 8 time_version_dict = {}  # 用来存放版本与时间对应关系
 9
10 result = re.compile(r'\d.*?/</a>.*?Z').findall(rep) # 匹配文件夹(版本号)和时间
11
12 for i in result:
13     time = i[-24:-1]                                # 提取时间
14     version = re.compile(r'.*?/').findall(i)[0]     # 提取版本号
15     time_version_dict[time] = version               # 构建时间和版本号的对应关系,形成字典
16     time_list.append(time)                          # 形成时间列表
17
18 latest_version = time_version_dict[max(time_list)]              # 用最大(新)时间去字典中获取最新的版本号
19 download_url = url + latest_version + 'chromedriver_win32.zip'  # 拼接下载链接
20
21 file = requests.get(download_url)
22 with open("chromedriver.zip", 'wb') as zip_file:                # 保存文件到脚本所在目录
23     zip_file.write(file.content)

思路

1、访问页面,观察规律
http://npm.taobao.org/mirrors/chromedriver/
打开页面后,观察发现我们需要的最新的Chromedriver版本,可以通过右边的时间进行对比后找到,但需要排除最下方的几个无用文件的干扰。
可以看出版本目录的链接都是数字开头,/结尾,容易想到用正则表达式提取,规则为\d.*?/

2、查看页面源码(接口返回),选择处理方法
查看接口,发现页面直接返回的是HTML,因此无法使用json处理,考虑使用BeautifulSoup4处理html文件。
然而实践中发现时间并没有包在a标签内,用bs4获取所有的a标签,并没有办法获取到对应的时间,所以也不能考虑用bs4处理。
那么只能尝试使用正则表达式对信息进行提取处理了,选用re库。

3、数据处理
每个a标签的格式为:
<a href="/mirrors/chromedriver/70.0.3538.16/">70.0.3538.16/</a> 2018-09-17T20:50:43.843Z

我们需要的只是后半段就可以了:70.0.3538.16/</a> 2018-09-17T20:50:43.843Z
规律为数字开头,中间是/</a>,结尾是Z,正则为:\d.*?/</a>.*?Z

代码为:results = re.compile(r'\d.*?/</a>.*?Z').findall(html内容)

在提出取来的信息中二次提取版本号:re.compile(r'.*?/').findall(result)

时间也可以用正则提取,不过由于格式比较固定,可以直接用字符串切片result[-24:-1],即最后的24个字符

接下来就简单了,找到最新的时间,然后把这个时间对应的版本号找到就行了

思路为在遍历每个a标签的同时:

  1. 收集所有时间组成一个列表time_list;
  2. 同时将时间和版本构造成字典time_version_dict;

最后用max函数找到time_list的最大值,把最大值作为key去找time_version_dict的版本。

PS:挖个坑,后续增加自动解压至指定目录的功能,方便直接替换系统环境内的旧Chromedriver文件。

2019.01.26更新

来填坑了
通过cmd命令查询当前Chromedriver的目录和版本

自动解压到系统环境内替换Chromedriver的代码

 1 import requests
 2 import re
 3
 4 url = 'http://npm.taobao.org/mirrors/chromedriver/'
 5 rep = requests.get(url).text
 6
 7 time_list = []          # 用来存放版本时间
 8 time_version_dict = {}  # 用来存放版本与时间对应关系
 9
10 result = re.compile(r'\d.*?/</a>.*?Z').findall(rep) # 匹配文件夹(版本号)和时间
11
12 for i in result:
13     time = i[-24:-1]                                # 提取时间
14     version = re.compile(r'.*?/').findall(i)[0]     # 提取版本号
15     time_version_dict[time] = version               # 构建时间和版本号的对应关系,形成字典
16     time_list.append(time)                          # 形成时间列表
17
18 latest_version = time_version_dict[max(time_list)]              # 用最大(新)时间去字典中获取最新的版本号
19 download_url = url + latest_version + 'chromedriver_win32.zip'  # 拼接下载链接
20
21 file = requests.get(download_url)
22 with open("chromedriver.zip", 'wb') as zip_file:                # 保存文件到脚本所在目录
23     zip_file.write(file.content)

View Code

将两段代码合并一下,加入判断是否已经为最新文件,再封装一下:

 1 import requests
 2 import re
 3 import os
 4 import zipfile
 5
 6 def get_latest_version(url):
 7     '''查询最新的Chromedriver版本'''
 8     rep = requests.get(url).text
 9     time_list = []                                          # 用来存放版本时间
10     time_version_dict = {}                                  # 用来存放版本与时间对应关系
11     result = re.compile(r'\d.*?/</a>.*?Z').findall(rep)     # 匹配文件夹(版本号)和时间
12     for i in result:
13         time = i[-24:-1]                                    # 提取时间
14         version = re.compile(r'.*?/').findall(i)[0]         # 提取版本号
15         time_version_dict[time] = version                   # 构建时间和版本号的对应关系,形成字典
16         time_list.append(time)                              # 形成时间列表
17     latest_version = time_version_dict[max(time_list)][:-1] # 用最大(新)时间去字典中获取最新的版本号
18     return latest_version
19
20 def download_driver(download_url):
21     '''下载文件'''
22     file = requests.get(download_url)
23     with open("chromedriver.zip", 'wb') as zip_file:        # 保存文件到脚本所在目录
24         zip_file.write(file.content)
25         print('下载成功')
26
27 def get_version():
28     '''查询系统内的Chromedriver版本'''
29     outstd2 = os.popen('chromedriver --version').read()
30     return outstd2.split(' ')[1]
31
32 def get_path():
33     '''查询系统内Chromedriver的存放路径'''
34     outstd1 = os.popen('where chromedriver').read()
35     return outstd1.strip('chromedriver.exe\n')
36
37 def unzip_driver(path):
38     '''解压Chromedriver压缩包到指定目录'''
39     f = zipfile.ZipFile("chromedriver.zip",'r')
40     for file in f.namelist():
41         f.extract(file, path)
42
43 if __name__ == "__main__":
44     url = 'http://npm.taobao.org/mirrors/chromedriver/'
45     latest_version = get_latest_version(url)
46     print('最新的chromedriver版本为:', latest_version)
47     version = get_version()
48     print('当前系统内的Chromedriver版本为:', version)
49     if version == latest_version:
50         print('当前系统内的Chromedriver已经是最新的')
51     else:
52         print('当前系统内的Chromedriver不是最新的,需要进行更新')
53         download_url = url + latest_version + '/chromedriver_win32.zip'  # 拼接下载链接
54         download_driver(download_url)
55         path = get_path()
56         print('替换路径为:', path)
57         unzip_driver(path)
58         print('更新后的Chromedriver版本为:', get_version())

测试一下:

收工。

转载于:https://www.cnblogs.com/haiya2019/p/10627739.html

Python自动下载最新的chromedriver相关推荐

  1. Python自动下载论文

    Python自动下载论文 下载地址 http://dblp.uni-trier.de/db/conf/sigcomm/ 目录 - 先上最终版本: - 说说sigcomm上论文下载的姿势 - 中间的一些 ...

  2. python 自动下载文件_【Py大法系列--03】Python如何自动下载文件

    问题描述 Python自动下载文件,通用文件,包括但不限于压缩文件.图片等. 解决方法 一般情况下,Python下载文件的方式有以下几种: 利用urllib.urllib2,即Python爬虫用的最多 ...

  3. python自动下载高品质无损歌曲

    不知道大家有没有这样的感觉,听到一些好听的歌曲,总是想要把歌曲下载到自己电脑或手机上才感觉到踏实,尤其是在早些年智能手机还没这么普及的时候,喜欢的歌曲不在自己电脑上就会没有安全感. 虽然现在听歌基本都 ...

  4. python自动下载qq文件夹_GitHub - 1061700625/QQZone_AutoDownload_Album: Python+selenium 自动下载QQ空间相册...

    QQZone_AutoDownload_Album Python+selenium 自动下载QQ空间相册 . selenium_firefox.zip 需要解压后放在同路径下 . 貌似腾讯的登陆加密做 ...

  5. python自动下载阿里云数据库数据_脚本自动下载阿里云每日备份数据库镜像

    脚本自动下载阿里云每日备份数据库镜像 背景 前端时间街道一个临时需求,要求根据每日的数据快照,统计计算出需要数据结果,并写入数据库,提供查询接口. 遇到两个自己没有尝试过的点: 阿里云导出的数据库是. ...

  6. python自动下载安装软件_30行Python代码从百度自动下载图片(内附源码和exe程序)...

    只需要30行代码就可以从百度自动下载图片 大家好,我是行哥,一个专门教小学生撸Python的编程老师(小学生都能学会的编程) 这里行哥想问大家三个问题 : - 你还在为批量下载表情包发愁吗? - 你还 ...

  7. python自动下载论文_python自动下载高品质无损歌曲

    不知道大家有没有这样的感觉,听到一些好听的歌曲,总是想要把歌曲下载到自己电脑或手机上才感觉到踏实,尤其是在早些年智能手机还没这么普及的时候,喜欢的歌曲不在自己电脑上就会没有安全感. 虽然现在听歌基本都 ...

  8. python自动下载邮件附件_Python 批量导出邮件附件 | 互联网笔记

    采用python 3 windows 环境可Anaconda进行一键安装环境, 此脚本适用用于下列状况 报表每日自动发送至邮箱,多邮箱每天需要登陆或使用客户端下载邮件 收集的资料手动下载太麻烦. 可在 ...

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

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

  10. python自动下载邮件附件_Python批量下载电子邮件附件并汇总合并Excel文件

    原标题:Python批量下载电子邮件附件并汇总合并Excel文件 前几天在公众号搞了一波送书活动,详见福利:免费赠送240本Python教材,该文推送之后,立刻收到了大量的样书申请表,那么接下来的工作 ...

最新文章

  1. Python最抢手、Go最有前途,7000位程序员揭秘2019软件开发现状
  2. python表达式3and not5的值_太原理工大学python考试题总结
  3. 王道考研——计算机组成原理(第二章 数据的表示和运算)
  4. Could not create JarEntryRevision
  5. 怎么判断再一个局域网内一个ip被两台机器占用_交换机与 VLAN 到底是怎么来的...
  6. LeetCode之简单回文数
  7. 麒麟710f能否升级到鸿蒙系统,定了!麒麟710以上支持升级鸿蒙系统,荣耀也可以升级...
  8. bootstrap方法_中介效应中的bootstrap方法
  9. hackathon活动复盘
  10. 苹果手机投屏linux电脑,iphone怎么投屏到电脑?苹果手机投屏到电脑图文教程
  11. 计算机电子科学技术产品,关于电子信息科学技术发展现状的思考
  12. 浅谈yolov4中的一部分数据增强
  13. html项目的致谢词,毕业论文的致谢词范文(精选5篇)
  14. Codeforces Round #703 (Div. 2)C1C2 Guessing the Greatest(二分)
  15. 华为防火墙双机热备(link-group和Eth-trunk)
  16. git 修改分支名称 --- git branch -m
  17. stm32 MPU6050 6轴姿态传感器的介绍与DMP的应用
  18. poi设置单元格背景颜色
  19. 单体架构、SOA和微服务
  20. Qt Phonon介绍及安装

热门文章

  1. freeRADIUS下EAP测试
  2. AAAI'22 | 基于情感分析的开放域对话系统
  3. 困惑度 | NLP中对困惑度感到困惑?
  4. EMNLP2021之AEDA:一种更简单的文本分类数据增强技术
  5. 搜索系统中的纠错问题
  6. 分享 | 绝对值得一看的深度学习三巨头之一的Yoshua Bengio清华大学讲座视频
  7. wireshark未响应
  8. 读《scikiit-learn机器学习》黄永昌第二章
  9. LeetCode—Python版数组简单题(一)
  10. 你的“数学潜意识”原来可以被唤醒