我使用的是Watir-Webdriver和火狐,以及watirwebdriver.com网站上推荐的方法来自动下载文件。这涉及到在FireFox中为特定文件类型设置FireFox about:config参数以禁用下载对话框。这很好用,但现在我正在尝试弄清楚如何最好地确定文件下载何时完成(有些需要几秒钟,有些需要几分钟),这样我就可以注销网站并进入下一个测试。似乎由于浏览器中没有留下任何视觉线索,我可能不得不监视下载目录中的文件。任何选择都将不胜感激。
发布于 2013-09-02 02:53:08
Chrome存储未完成的下载,并添加了.crdownload文件扩展名。检查下载目录是否有以.crdownload结尾的文件,这应该会告诉您下载是否仍在进行中
发布于 2012-01-12 01:14:07
也许您可以跟踪文件大小,以查看它何时停止更改几秒钟。
发布于 2012-11-17 06:48:56
我不喜欢仅仅看文件大小,它感觉很脆弱,所以我最终使用lsof命令来检测何时没有进程保持文件打开,然后读取文件。更好的是,由于网络问题导致的下载暂停不会导致间歇性错误,但更糟糕的是(?)因为它不是可移植的,并且由lsof命令外壳。
代码看起来像这样:
# Watch the download dir for new files, and read the first new file that
# appears.
def read_newest_download
existing_files = list_files_in_download_dir
new_files = []
Timeout::timeout(DOWNLOAD_TIMEOUT) do
while (new_files = list_files_in_download_dir - existing_files).empty?
sleep 0.25
end
end
if 1 == new_files.size
wait_for_file_to_be_closed(new_files.first)
File.read(new_files.first)
else
fail "Found #{new_files.size} new files."
end
end
# Ignore files ending in .part, which is common for temp files in Firefox.
def list_files_in_download_dir
raise ArgumentError, "No download dir specified" unless @opts[:download_dir]
@_download_glob ||= File.join(@opts[:download_dir], "*")
# Ignore files ending in .part as they're temporary files from Firefox.
Dir[@_download_glob].entries.reject {|e| /\.part$/ === e}
end
def wait_for_file_to_be_closed(filename)
begin
sleep 0.25
end until `lsof #{filename}`.blank?
endhttps://stackoverflow.com/questions/8812708
复制相似问题