{ "title": "Python 下载文件函数优化 - click_download_file", "description": "优化 Python 函数 click_download_file,提高下载效率,减少冗余代码。使用 while 循环代替重复代码,并根据文件大小判定下载时间。", "keywords": "python, 下载文件, 函数优化, click_download_file, while 循环, 文件大小, 下载时间, 效率提升, 代码优化", "content": "def click_download_file(self, urn, path):\n\t""点击下载按钮,下载文件"" \tdownloaded_files_success = list() # 下载成功的文件列表\n\tdownloaded_files_failed = list() # 下载失败的文件列表\n\tlinks = self.browser.safe_get_link(By.CSS_SELECTOR, ATTACHMENT_VIEW_WINDOW_ELEMENT)\n\tfor link in links:\n\t # 获取文件名 文件大小\n\t file_title, download_time_min, download_time_max = self.file_title_data(link, urn)\n\t retry_count = 0\n\t while retry_count < 3:\n\t self.browser.click_with_link(link)\n\t self.download_alert() # 文件下载过大\n\t time.sleep(download_time_max) # 文件下载时间\n\t # 文件下载\n\t status = self.download_file_is_successfully(path, file_title, download_time_min)\n\t if status:\n\t downloaded_files_success.append(file_title) # 下载成功\n\t logger.info("\n >> 【urn = {}】文件{}下载成功".format(urn, file_title))\n\t break\n\t else:\n\t retry_count += 1\n\t logger.info("\n >> 【urn = {}】文件{}下载失败,开始第{}次重试".format(urn, file_title, retry_count))\n\t \n\t # if retry_count >= 3:\n\t # logger.info("\n >> 【urn = {}】文件{}重试下载失败".format(urn, file_title))\n\t # downloaded_files_failed.append(file_title) # 下载失败\n\t\tif retry_count >= 3:\n\t logger.info("\n >> 【urn = {}】文件{}重试下载失败".format(urn, file_title))\n\t downloaded_files_failed.append(file_title) # 下载失败\n\n\tif downloaded_files_failed:\n\t logger.info("\n >> 【urn = {}】下载失败文件列表:{}".format(urn, downloaded_files_failed))\n\t raise FileException(message=ErrorMsg.NO_DOWNLOADABLE_FILES, file_list=downloaded_files_failed)\n\tif downloaded_files_success:\n\t logger.info("\n >> 【urn = {}】下载成功文件列表:{}".format(urn, downloaded_files_success))\n\t new_file_title = self.modify_file(path, urn, downloaded_files_success) # 下载成功修改文件名\n\t return new_file_title\n\n\ndef download_file_is_successfully(cls, path, file_name, download_time_limit):\n\t""文件是否下载成功"" \tfile_path = os.path.join(path, file_name)\n\tfile_path_with_suffix = file_path + ".crdownload"\n\tlast_size = 0\n\twhile os.path.exists(file_path_with_suffix):\n\t cur_size = os.path.getsize(file_path_with_suffix)\n\t speed = cur_size - last_size\n\t last_size = cur_size\n\t if speed > 0:\n\t time.sleep(download_time)\n\t else:\n\t return False\n\tif os.path.exists(file_path): # 文件存在\n\t return True\n\treturn False\n\n\ndef file_title_data(self, link, urn):\n\t""获取文件信息:文件名,大小"" \ttitle = link.get_attribute("title")\n\tfile_titles = re.findall(REG, title)\n\tif not file_titles:\n\t file_titles = re.findall(CHINE_REG, title)\n\tif len(file_titles) == 0:\n\t QueryResult.update(UPDATE_INVOICES_SQL, (generate_utils.get_strtime(), urn))\n\tfile_title = file_titles[0].strip() # 文件名\n\t# [Original File] 230324043.eml (14159) kB\n\tfile_size_str = title.split("(")[1].split(")")[0].strip()\n\tfile_size = int(file_size_str) # 文件大小\n\tdownload_time_min = self.calculate_download_time_limit(file_size) # 下载时间\n\treturn file_title, download_time_min, download_time_min }

Python 下载文件函数优化 - click_download_file

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

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