pythonselenium自动化教程(python使用selenium实现批量文件下载)
pythonselenium自动化教程
python使用selenium实现批量文件下载背景
实现需求:批量下载联想某型号的全部驱动程序。
一般在做网络爬虫的时候,都是保存网页信息为主,或者下载单个文件。当涉及到多文件批量下载的时候,由于下载所需时间不定,下载的文件名不定,所以有一定的困难。
思路
参数配置
在涉及下载的时候,需要先对chromedriver
进行参数配置,设定默认下载目录:
|
global base_path profile = { 'download.default_directory' : base_path } chrome_options = webdriver.chromeoptions() chrome_options.add_experimental_option( 'prefs' , profile) driver = webdriver.chrome(executable_path = '../common/chromedriver' , options = chrome_options) driver.implicitly_wait( 10 ) |
页面分析
联想官网上每个型号的驱动下载页面如上图所示,虽然前面有一个登陆的遮罩,但是实际上并不影响点击。需要注意的是:
驱动列表,需要点击才可以显示具体的下载项目表格,否则可以找到对应元素但无法获取正确的信息
|
driver_list.find_element_by_class_name( 'download-center_list_t_icon' ).click() |
每个下载列表的表头建议做跳过处理
|
if sub_list.find_element_by_class_name( 'download-center_usblist_td01' ).text = = '驱动名称' : continue |
下载处理
在页面中,找到“普通下载”的元素,点击即可下载。最终实现结果是我们希望根据网页的列表进行重命名和重新归档到文件夹,但是我们会发现如下几个问题:
- 下载过来的文件名无法控制。
- 依次下载的话,我们无法确认需要下载多久。并行下载的话,无法有效的区分重命名。
在网上找了很久,也没找到在下载时直接重命名的方法,所以最终选择依次下载,当每次下载完成后进行重命名和归档,思路如下:
- 对每个驱动目录,先新建一个文件夹,如:主板
- 点击下载后开始下载文件
-
通过
os
模块,找到下载目录中所有文件,并按创建时间排序,找到最新创建的文件 -
由于未完成的文件后缀为
.crdownload
(chrome),那么根据后缀来判断是否已完成下载,未完成的话继续等待
待下载完成,将文件重命名并剪切到开始建立的归档目录。这里需要注意的是,有些文件名中不能存在/
符号,否则会导致重命名失败,需要做一下替换。
在后期测试的时候,发现还有几个坑需要注意:
在查找最新创建的文件时,需要注意.ds_store
文件的处理。(mac系统,windows则需要考虑thumbs.db
)
需要判断一下最新创建的文件是否为文件夹,可以通过filter
函数来处理
最新文件的排序查找实现如下:
|
def sort_file(): # 排序文件 dir_link = base_path dir_lists = list ( filter (check_file, os.listdir(dir_link))) if len (dir_lists) = = 0 : return '' else : dir_lists.sort(key = lambda fn: os.path.getmtime(dir_link + os.sep + fn)) return os.path.join(base_path, dir_lists[ - 1 ]) def check_file(filename): # 忽略系统文件 if filename = = '.ds_store' or filename = = 'thumbs.db' : return false global base_path # 排除文件夹 return os.path.isfile(os.path.join(base_path, filename)) |
总结
最终实现效果如下:
完整代码参考:https://github.com/keejo125/web_scraping_and_data_analysis/tree/master/lenovo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://segmentfault.com/a/1190000018450351
- pythonssh登录服务器(对python 通过ssh访问数据库的实例详解)
- python复杂的验证码处理(Python 通过打码平台实现验证码的实现)
- python编写一个名片(详解Python做一个名片管理系统)
- python列表和条件组合的处理(一篇文章带你弄懂Python基础之列表相关操作和嵌套)
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- anaconda如何配置python3.7(WIn10+Anaconda环境下安装PyTorch避坑指南)
- python爬虫request方法介绍(详解Python3网络爬虫二:利用urllib.urlopen向有道翻译发送数据获得翻译结果)
- python一分钟认识条件判断(对python判断ip是否可达的实例详解)
- python format的用法(Python中format格式输出全解)
- python模块学习之random模块(详解Python基础random模块随机数的生成)
- python 串口图形化(python使用MQTT给硬件传输图片的实现方法)
- 如何去阿里云解析域名(利用Python+阿里云实现DDNS动态域名解析的方法)
- python正则表达式入门(Python正则表达式实现简易计算器功能示例)
- python接口管理系统(基于Python实现用户管理系统)
- python中如何定义带走参数的函数(Python函数定义及传参方式详解4种)
- python中dict怎么创建(Python数据类型之Dict字典实例详解)
- 靳东新剧《精英律师》定档,众星云集,这剧可追(靳东新剧精英律师定档)
- 精英律师 廖佳敏封印恋情曝光,顾婕马失前蹄 你个老不死的(廖佳敏封印恋情曝光)
- 以家人之名广受好评,剧情生动引起观众共鸣,演员张新成圈粉无数(以家人之名广受好评)
- 三兄妹感情再遇波折,人设接连崩塌 《以家人之名》剧情猜不透(三兄妹感情再遇波折)
- 《小敏家》金波想要复婚 这只是他圈套的第1步,更可恶的在后面(小敏家金波想要复婚)
- 小敏家 剧情离谱一锅乱炖,但他们俩绝对是这部剧的一大 亮点(剧情离谱一锅乱炖)
热门推荐
- easyui combogrid分页
- python 正则表达式在代码里的使用(python中正则表达式与模式匹配)
- linux如何搭建ftp服务器(Linux下搭建ftp服务器)
- linux中的软连接是什么(区分Linux硬链接与软链接)
- windows server 2008r2怎么安装(Windows Server2008 R2 MVC 环境安装配置教程)
- vue.js入门教学第15讲(Vue.js 使用AntV X6的示例步骤)
- iis7如何使用(IIS7的应用程序池详细解析)
- 以服务器为中心的存储架构的优势(解析云服务器存储系统的结构模型)
- 网站服务器分布(10个常见网站服务器架构介绍)
- utf-8 gbk gb2312的区别
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9