资讯专栏INFORMATION COLUMN

使用selenium实现批量文件下载

高璐 / 1028人阅读

摘要:背景实现需求批量下载联想某型号的全部驱动程序。最终实现结果是我们希望根据网页的列表进行重命名和重新归档到文件夹,但是我们会发现如下几个问题下载过来的文件名无法控制。

背景

实现需求:批量下载联想某型号的全部驱动程序。

一般在做网络爬虫的时候,都是保存网页信息为主,或者下载单个文件。当涉及到多文件批量下载的时候,由于下载所需时间不定,下载的文件名不定,所以有一定的困难。

思路 参数配置

在涉及下载的时候,需要先对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/w...

如果大家有更好的方法,也欢迎分享。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43344.html

相关文章

  • [Python自动化]selenium文件批量下载

    摘要:自动化这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。 Python 自动化 这一专栏...

    wzyplus 评论0 收藏0
  • Python+Selenium实现在Geoserver批量发布Mongo矢量数据

      小编写这篇文章的一个主要目的,主要是来给大家做一个解答,解答的内容是Python+Selenium,具体的一个内容解释是什么呢?比如,我们可以实现Geoserver批量发布Mongo矢量数据,具体的一个内容,下面就给大家详细解答下。  首先,声明一下,这里我完成的脚步属于半自动化的,我戏称它为有监督的半自动化脚本。具体原因后面会详细说明。  一、安装Selenium和ChromeDriver ...

    89542767 评论0 收藏0
  • 基于Selenium + Python的web自动化框架

    摘要:一什么是是一个基于浏览器的自动化工具,她提供了一种跨平台跨浏览器的端到端的自动化解决方案。模块主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。测试用例仓库用例仓库主要用来组织自动化测试用例。 一、什么是Selenium? Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:...

    sunny5541 评论0 收藏0
  • 怎么使用python对图片进行批量压缩

      小编写这篇文章的主要目的,主要是讲解一些关于python的事情,比如需要对图片进行批量压缩,压缩的方法还是比较的多的,那么,为了提高效率,怎么进行批量压缩呢?下面就给大家详细解答下。  前言  最近在研究怎么对图片资源进行无损压缩,网上也找了一些资料。总而言之,收获不少,所以想对最近的学习做个总结。  无损压缩其实是相对而言的,目的是为了减小图片资源的内存大小但又不影响图片的显示质量。下面我将...

    89542767 评论0 收藏0
  • 【小白+python+selenium库+图片爬取+反爬+资料】超详细新手实现(01)webdriv

    摘要:且本小白也亲身经历了整个从小白到爬虫初入门的过程,因此就斗胆在上开一个栏目,以我的图片爬虫全实现过程为例,以期用更简单清晰详尽的方式来帮助更多小白应对更大多数的爬虫实际问题。 前言: 一个月前,博主在学过python(一年前)、会一点网络(能按F12)的情况下,凭着热血和兴趣,开始了pyth...

    Half 评论0 收藏0

发表评论

0条评论

高璐

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<