python chromedriver_Python自动下载最新的chromedriver

本文介绍了如何使用Python脚本自动从淘宝npm镜像下载最新的chromedriver,以解决Chrome浏览器版本更新后与现有chromedriver不兼容的问题。通过正则表达式提取版本信息,找到最新版本并下载,最终实现自动替换系统中的旧版chromedriver。
摘要由CSDN通过智能技术生成

前言

chromedriver是Web UI自动化必备的一个谷歌Chrome浏览器的驱动文件,需要和自己电脑上安装的Chrome浏览器版本对应才能正常使用。

经常遇到新手装的Chrome浏览器自动更新了,但是chromedriver没更新,导致原本正常的脚本突然不能用了。

因此想做一个脚本自动下载最新的chromedriver。

代码

1 importrequests2 importre3

4 url = 'http://npm.taobao.org/mirrors/chromedriver/'

5 rep =requests.get(url).text6

7 time_list = [] #用来存放版本时间

8 time_version_dict = {} #用来存放版本与时间对应关系

9

10 result = re.compile(r'\d.*?/.*?Z').findall(rep) #匹配文件夹(版本号)和时间

11

12 for i inresult: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标签的格式为:

70.0.3538.16/ 2018-09-17T20:50:43.843Z

我们需要的只是后半段就可以了:70.0.3538.16/ 2018-09-17T20:50:43.843Z

规律为数字开头,中间是/,结尾是Z,正则为:\d.*?/.*?Z

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

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

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

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

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

收集所有时间组成一个列表time_list;

同时将时间和版本构造成字典time_version_dict;

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

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

2019.01.26更新

来填坑了

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

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

1 importrequests2 importre3

4 url = 'http://npm.taobao.org/mirrors/chromedriver/'

5 rep =requests.get(url).text6

7 time_list = [] #用来存放版本时间

8 time_version_dict = {} #用来存放版本与时间对应关系

9

10 result = re.compile(r'\d.*?/.*?Z').findall(rep) #匹配文件夹(版本号)和时间

11

12 for i inresult: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 importrequests2 importre3 importos4 importzipfile5

6 defget_latest_version(url):7 '''查询最新的Chromedriver版本'''

8 rep =requests.get(url).text9 time_list = [] #用来存放版本时间

10 time_version_dict = {} #用来存放版本与时间对应关系

11 result = re.compile(r'\d.*?/.*?Z').findall(rep) #匹配文件夹(版本号)和时间

12 for i inresult: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 returnlatest_version19

20 defdownload_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 defget_version():28 '''查询系统内的Chromedriver版本'''

29 outstd2 = os.popen('chromedriver --version').read()30 return outstd2.split(' ')[1]31

32 defget_path():33 '''查询系统内Chromedriver的存放路径'''

34 outstd1 = os.popen('where chromedriver').read()35 return outstd1.strip('chromedriver.exe\n')36

37 defunzip_driver(path):38 '''解压Chromedriver压缩包到指定目录'''

39 f = zipfile.ZipFile("chromedriver.zip",'r')40 for file inf.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())

测试一下:

收工。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值