2015-01-16 180 views
3

我設法用Selenium無聲下載文件。但是,由於服務器發送的每個文件具有相同的名稱,因此Firefox會自動爲文件重命名該文件。但我想根據當前日期&時間重命名文件。所以,試過:讓Selenium等待文件下載完成

  1. 開始下載文件 - > downloadLink.click();

  2. 雖然(不是文件與 - 原名稱存在,或<名>。部分存在)       {} Thread.sleep(2000);

  3. 重命名下載的文件,所需的名稱。

但它重命名了一些文件。有些長度爲0,最後一個文件甚至沒有重命名。我認爲這是因爲我的代碼在下載後繼續,並且在while循環中不輪詢。我該怎麼辦 ?提前致謝。

+1

首先,你可以從你的磁盤上刪除文件,以避免firefox自動重命名,然後,如果你知道文件的大小,你可以在你的循環中檢查它。 – Morvader

+0

我只能在下載完成後「移動」(不刪除)文件,我的問題是如何知道它已完成? –

+0

你知道文件的大小嗎?如果你知道它,你可以將這個條件添加到while循環中。等到文件存在並達到那個尺寸 – Morvader

回答

0

我會讓你的自動化將文件移動到不同的位置並重命名它。 System.IO.File.Move("oldfilename", "newfilename");(C#)

可能將日期時間添加到文件名的末尾。

這樣你就不會遇到重複文件名的問題,也無法找到正確的文件。

+1

我不能,請參考我上面的評論。我的問題不是重命名,而是在Firefox完成下載時發現。 –

0

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

0

最好的解決方案是在下載完成後重命名文件。

此外,我建議你清除任何.part文件作爲啓動前提條件。然後,在進入while循環之前,根據您的計算機速度和Internet速度,使Thread.sleep();讓我們說thread.sleep爲5k毫秒。

然後輸入while循環並查找.part文件。尋找以.part結尾的文件。如果存在,等待另一個5k毫秒。

到目前爲止,該解決方案已爲我工作。