python selenium下载文件,python自动从网页下载文件
背景
实现:批量下载联想某型号的所有驱动。
一般当你是网络爬虫的时候,主要是保存网页信息或者下载单个文件。在批量下载多个文件时,由于下载时间不确定,文件名也不确定,所以比较困难。
思考
参数配置
下载的时候需要配置chromedriver的参数,设置默认下载目录:
全局基本路径
profile={
download.default_directory :基本路径
}
chrome_options=webdriver。ChromeOptions()
chrome _ options . add _ experimental _ option( prefs ,profile)
driver=webdriver。Chrome(executable_path=./common/chromedriver ,options=chrome_options)
driver . implicit _ wait(10)
页面分析
联想官网各机型的驱动下载页面如上图所示。虽然前面有登录屏蔽,但实际上并不影响点击。请注意:
驱动列表,需要点击才能显示具体的下载项表单,否则可以找到对应的元素却无法获得正确的信息。
driver _ list . find _ element _ by _ class _ name( download-center _ list _ t _ icon )。单击()
建议跳过每个下载列表的标题。
if _ list . find _ element _ by _ class _ name( download-center _ USB list _ td01 )。text==驱动程序名称:
继续
下载处理
在页面中找到“正常下载”的元素,点击下载。最终的结果是我们想要根据网页列表重命名并重新归档到文件夹,但是我们会发现以下问题:
下载的文件名不可控。
反过来,我们也无法确认下载需要多长时间。如果并行下载,重命名无法有效区分。
我在网上找了很久,下载的时候找不到直接重命名的方法,所以最后选择依次下载,每次下载后重命名存档。想法如下:
对于每个驱动目录,首先创建一个新的文件夹,比如motherboard。
单击下载开始下载文件。
通过os模块,找到下载目录下的所有文件,按照创建时间排序,找到新创建的文件。
因为未完成文件的后缀是。crdownload(chrome),根据后缀判断下载是否已经完成。如果没有,继续等待。
下载完成后,将文件重命名并剪切到您开始构建的归档目录中。这里需要注意的是,有些文件名中不能存在/符号,否则重命名会失败,需要替换。
在后期的测试中,发现还是有几个坑需要注意:
注意…的处理。DS_Store文件时,寻找新创建的文件。(Mac系统,Windows需要考虑thumbs.db)
需要确定新创建的文件是否是文件夹,这可以通过过滤功能来处理。
最新文件的排序和搜索如下:
def排序文件():
#排序文件
目录链接=基本路径
dir _ lists=list(filter(check _ file,os.listdir(dir_link)))
如果len(目录列表)==0:
返回“”
否则:
dir _ lists . sort(key=lambda fn:OS . path . getmtime(dir _ link OS . sep fn))
return os.path.join(基本路径,目录列表[-1])
定义检查文件(文件名):
#忽略系统文件
如果文件名==。 DS_Store 或filename==thumbs.db :
返回False
全局基本路径
#排除文件夹
返回OS . path . is file(OS . path . join(base _ path,filename))
摘要
最终结果如下:
这就是本文的全部内容。希望对大家的学习有帮助,也希望大家多多支持剧本之家。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。