让Selenium等待文件下载完成

时间:2015-01-16 09:02:34

标签: java file firefox selenium download

我设法用Selenium静默下载文件。但是,Firefox会自动重命名文件,方法是在文件名中添加1,2,3 ..,因为服务器发送的每个文件都具有相同的名称。但我想根据当前日期和时间重命名文件。时间。所以,尝试过:

  1. 开始下载文件 - > downloadLink.click();

  2. while(NOT file-With-original-name存在或< filename> .part存在)     {Thread.sleep(2000);}

  3. 将下载的文件重命名为所需名称。

  4. 但它重命名了一些文件。有些是0长度,最后一个文件甚至没有重命名。我认为这是因为我的代码在下载后继续,并且不在while循环中轮询。我该怎么办 ?提前谢谢。

4 个答案:

答案 0 :(得分:0)

我会让您自动将文件移动到其他位置并重命名。 System.IO.File.Move("oldfilename", "newfilename");(C#)

可能会在文件名的末尾添加日期时间。

这样你就不会遇到重复文件名的问题,也无法找到正确的文件。

答案 1 :(得分:0)

double fileSize = file.length(); while(!file.exists()|| fileSize == 0){Thread.sleep(2000); }

答案 2 :(得分:0)

最好的解决方案是在下载后重命名文件。

另外,我建议您将任何.part文件清除为启动前置条件。然后在进入while循环之前,根据您的计算机速度和Internet速度,制作Thread.sleep();让我们说thread.sleep为5k毫秒。

然后输入while循环并查找.part文件。查找以.part结尾的文件。如果存在,请等待另外5k毫秒。

到目前为止,这个解决方案对我有用。

答案 3 :(得分:0)

我使用的技巧是打开下载管理器页面,并期待一个表明下载已完成的元素。遵循使用的 Python 代码:

# Wait until the download finish. This code just works for one single download at time on Firefox.
# browser.execute_script('window.open();')
# ActionChains(browser).key_down(Keys.COMMAND).send_keys('t').key_up(Keys.COMMAND).perform()
browser.get('about:downloads')
# files = browser.find_elements_by_class_name('download-state')
WebDriverWait(browser, URL_LOAD_TIMEOUT).until(EC.presence_of_element_located((By.CLASS_NAME, 'downloadIconShow')))
# 'downloadIconCancel'

这种方法的问题是它可能依赖于 Firefox 版本,如果 Mozilla 更改该下载管理器页面。