簡體   English   中英

讓 Selenium 等待文件下載完成

[英]Make Selenium wait for a file download to finish

我設法用 Selenium 靜默下載了該文件。 但是 Firefox 通過在文件名中添加 1,2,3.. 來自動重命名文件,因為服務器發送的每個文件都具有相同的名稱。 但我想根據當前日期和時間重命名文件。 所以,試過:

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

  2. 雖然(不存在原始文件名或 <文件名>.part 存在){ Thread.sleep(2000); }

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

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

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

可能會在文件名的末尾添加一個日期時間。

這樣您就永遠不會遇到文件名重復和無法找到正確文件的問題。

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

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

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

然后進入while循環並尋找.part文件。 查找以 .part 結尾的文件。 如果存在,再等待 5k 毫秒。

到目前為止,這個解決方案對我有用。

我使用的技巧是打開下載管理器頁面,並期待一個指示下載已完成的元素。 遵循使用的 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 更改該下載管理器頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM