def click_download_file(self, urn, path):
    '点击下载按钮,下载文件'
    downloaded_files_success = list()  # 下载成功的文件列表
    downloaded_files_failed = list()  # 下载失败的文件列表
    links = self.browser.safe_get_link(By.CSS_SELECTOR, ATTACHMENT_VIEW_WINDOW_ELEMENT)
    index = 0  # 下载链接索引
    while index < len(links):
        link = links[index]
        # 获取文件名 文件大小
        file_title, download_time_limit, file_size = self.file_title_data(link, urn)
        self.browser.click_with_link(link)
        self.download_alert()  # 文件下载过大
        logger.info(
            '
 >> 【urn = {}】文件名{}文件大小{},下载时间{}'.format(urn, file_title, file_size, download_time_limit))
        time.sleep(download_time_limit)  # 文件下载时间
        # 文件下载
        status = self.download_file_is_successfully(path, file_title, file_size)
        if status:
            downloaded_files_success.append(file_title)  # 下载成功
            index += 1  # 下载成功后继续下一个链接
        else:
            for i in range(3):  # 下载失败 重试下载
                self.browser.click_with_link(link)
                self.download_alert()  # 重试需要点击文件下载过大
                time.sleep(download_time_limit)
                status = self.download_file_is_successfully(path, file_title, file_size)
                if status:
                    downloaded_files_success.append(file_title)  # 重试成功
                    logger.info('
 >> 【urn = {}】文件{}重试下载成功'.format(urn, file_title))
                    index += 1  # 重试成功后继续下一个链接
                    break
                else:
                    logger.info('
 >> 【urn = {}】文件{}重试下载失败'.format(urn, file_title))
                    downloaded_files_failed.append(file_title)  # 下载失败
                    continue

    if downloaded_files_failed:
        logger.info('
 >> 【urn = {}】下载失败文件列表:{}'.format(urn, downloaded_files_failed))
        raise FileException(message=ErrorMsg.NO_DOWNLOADABLE_FILES, file_list=downloaded_files_failed)
    if downloaded_files_success:
        logger.info('
 >> 【urn = {}】下载成功文件列表:{}'.format(urn, downloaded_files_success))
        new_file_title = self.modify_file(path, urn, downloaded_files_success)  # 下载成功修改文件名
        return new_file_title

该函数使用 while 循环遍历下载链接,并针对每个链接进行下载操作。

函数功能:

  1. 获取所有下载链接
  2. 循环遍历每个链接
  3. 点击下载按钮
  4. 处理“文件下载过大”的提示
  5. 等待文件下载完成
  6. 验证文件是否下载成功
  7. 如果下载失败,尝试重试 3 次
  8. 记录下载成功和失败的文件
  9. 如果所有文件下载成功,修改文件名并返回新文件名
  10. 如果有文件下载失败,抛出异常

优化点:

  1. 使用 while 循环遍历下载链接,避免使用 for 循环遍历后重新获取链接列表
  2. 添加 index 变量,记录当前下载链接的索引,方便在下载成功或重试成功后继续下一个链接
  3. 优化代码结构,使代码更易于阅读和理解
Python 下载文件方法:click_download_file 函数

原文地址: https://www.cveoy.top/t/topic/qhlC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录