Python 文件下载代码优化:减少重复调用
{ "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()的问题。
原文地址: https://www.cveoy.top/t/topic/qhtn 著作权归作者所有。请勿转载和采集!