2012-05-23 48 views
5

我使用selenium webdriver使用firefox進行一些下載。目前我的腳本在下載完成後等待特定的時間,然後關閉Firefox。我想知道是否有辦法配置Firefox自動關閉下載完成?或者使用selenium webdriver,我可以檢查下載是否已完成?我不想使用任何添加,因爲它可能會在我的腳本中添加依賴項。我不能使用wget/curl等來下載文件。 在此先感謝下載完成後會自動關閉firefox

回答

2

什麼伊格納西奧·孔特雷拉斯說。輪詢下載路徑可能是最好的(最健壯的)解決方案。

替代#1:

使用FirefoxProfileDownload Statusbar插件。它有一個方便的選項,「在窗口關閉後繼續在下載管理器中下載」(或類似的東西),這樣它將保持Firefox在後臺運行,直到下載完成。

替代#2:

下載使用直接的this文件(或任何其他類似的webdriver友好的工具)......或者this,如果你能。這將徹底消除Firefox的進程。

+0

就像數據點一樣,指向下載狀態欄的鏈接指向一個較舊的插件。在安裝它之前(因爲我沒有太在意),賽門鐵克因爲它的網頁充斥着廣告軟件而大吃一驚。更新後的鏈接:https://addons.mozilla.org/en-us/firefox/addon/download-status-bar/ –

1

我不確定這是否會工作,但你有沒有考慮探索Firefox的下載位置?輪詢它,直到您看到下載已完成。

如果我沒有錯,當它被下載的文件時,應該有一個額外的擴展名爲.part的文件。

是這樣的(僞):

... 

WebDriver poller = new FirefoxDriver() 
poller.get("path to download folder"); 

while ("file with .part extension is present") { 
    // Wait/sleep some time 
    // Refresh poller 
} 

// close downloading firefox instance 
firefox.quit(); 
// close the polling instance 
poller.quit(); 

希望它可以幫助

+0

Thanks Ignacio。但問題是,在給定的時間,可以運行多個firefoxes實例。多個Firefox實例可以下載到相同的位置。 –

+0

好吧,您可以確定每個實例都會輪詢下載位置,以查找各自下載的.part文件(如果實例是從分開的java運行代碼實例中引發的)。 或者如果所有這些都是從同一個程序執行的,您可以創建一個文件名數組,以便您可以在需要時拋出一個唯一的輪詢驅動程序來關閉每個firefox實例。 –

2

您可以使用硒的webdriver API的WebDriverWait類使用下面的代碼做投票:

 (new WebDriverWait(driver, 180, 10)).until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver d) { 
       return !downloadedFilePart.exists(); 
      } 
     }); 

上面的代碼檢查用。第三部分的擴展程序文件下載每10秒鐘直到下載完成或3分鐘後超時。