我用selenium开始下载.下载完成后,需要采取某些措施,是否有任何简单的方法可以找出下载完成的时间?(我正在使用FireFox驱动程序)
没有内置的selenium方式等待下载完成.
这里的一般想法是等到文件出现在"下载"目录中.
这可能是通过一遍又一遍地检查文件是否存在来实现的:
检查并等待文件存在以进行读取
或者,通过使用watchdog
监视目录之类的东西:
如何查看目录以进行更改?
监控文件/目录的内容?
我最近遇到了这个问题。我一次下载了多个文件,如果下载失败,我必须以一种超时的方式进行构建。
该代码每秒检查一些下载目录中的文件名,并在文件名完成或退出时间超过20秒后退出。返回的下载时间用于检查下载是否成功或是否超时。
import time import os def download_wait(path_to_downloads): seconds = 0 dl_wait = True while dl_wait and seconds < 20: time.sleep(1) dl_wait = False for fname in os.listdir(path_to_downloads): if fname.endswith('.crdownload'): dl_wait = True seconds += 1 return seconds
我相信这仅适用于chrome文件,因为它们以.crdownload扩展名结尾。可能有类似的方法可以签入其他浏览器。
编辑:最近,我更改了.crdownload
在没有显示为扩展名的时间使用此功能的方式。本质上,这也只是等待正确数量的文件。
def download_wait(directory, timeout, nfiles=None): """ Wait for downloads to finish with a specified timeout. Args ---- directory : str The path to the folder where the files will be downloaded. timeout : int How many seconds to wait until timing out. nfiles : int, defaults to None If provided, also wait for the expected number of files. """ seconds = 0 dl_wait = True while dl_wait and seconds < timeout: time.sleep(1) dl_wait = False files = os.listdir(directory) if nfiles and len(files) != nfiles: dl_wait = True for fname in files: if fname.endswith('.crdownload'): dl_wait = True seconds += 1 return seconds