{ "title": "def click_download_file(self, urn, path):\n """点击下载按钮,下载文件""" downloaded_files_success = [] # 下载成功的文件列表 downloaded_files_failed = [] # 下载失败的文件列表 links = self.browser.safe_get_link(By.CSS_SELECTOR, ATTACHMENT_VIEW_WINDOW_ELEMENT) for link in links: # 获取文件名 文件大小 file_title, download_time_limit, file_size = self.file_title_data(link, urn) status = self.download_with_retry(link, file_title, download_time_limit, file_size, path, urn) if status: downloaded_files_success.append(file_title) # 下载成功 else: downloaded_files_failed.append(file_title) # 下载失败

    return downloaded_files_success, downloaded_files_failed

def download_with_retry(self, link, file_title, download_time_limit, file_size, path, urn):
    retry_count = 3
    while retry_count > 0:
        self.browser.click_with_link(link)
        if retry_count < 3:
            self.download_alert()  # 重试需要点击文件下载过大
        logger.info(
            "\n >> 【urn = {}】文件名{}文件大小{},下载时间{}".format(urn, file_title, file_size, download_time_limit))
        status = self.download_file_is_successfully(path, file_title, file_size)
        if status:
            return True  # 下载成功
        else:
            time.sleep(download_time_limit)
            status = self.download_file_is_successfully(path, file_title, file_size)
            if status:
                logger.info("\n >> 【urn = {}】文件{}重试下载成功".format(urn, file_title))
                return True  # 重试成功
            else:
                logger.info("\n >> 【urn = {}】文件{}重试下载失败".format(urn, file_title))
                retry_count -= 1

    return False  # 重试次数用尽,下载失败

这里优化,可以self.browser.click_with_link(link) self.download_alert() 这两行代码可以只写一次吗内容:是的,可以将这两行代码只写一次。可以在第一次点击链接之前调用self.download_alert(),然后在每次重试之前不再重复调用。修改后的代码如下:

def download_with_retry(self, link, file_title, download_time_limit, file_size, path, urn):
    retry_count = 3
    while retry_count > 0:
        self.browser.click_with_link(link)
        if retry_count < 3:
            self.download_alert()  # 重试需要点击文件下载过大
        logger.info("\n >> 【urn = {}】文件名{}文件大小{},下载时间{}".format(urn, file_title, file_size, download_time_limit))
        status = self.download_file_is_successfully(path, file_title, file_size)
        if status:
            return True  # 下载成功
        else:
            time.sleep(download_time_limit)
            status = self.download_file_is_successfully(path, file_title, file_size)
            if status:
                logger.info("\n >> 【urn = {}】文件{}重试下载成功".format(urn, file_title))
                return True  # 重试成功
            else:
                logger.info("\n >> 【urn = {}】文件{}重试下载失败".format(urn, file_title))
                retry_count -= 1

    return False  # 重试次数用尽,下载失败

这样就避免了重复调用self.download_alert()的问题。

Python 文件下载代码优化:减少重复调用

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

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