2015-08-28 88 views
4

通過Selenium下載文件的舊方法似乎不再奏效。使用Selenium和Firefox版本40,我如何下載文件?

我的代碼是:

fp = webdriver.FirefoxProfile() 
    fp.set_preference("browser.download.dir", os.getcwd()) 
    fp.set_preference("browser.download.folderList", 2) 
    fp.set_preference("browser.download.manager.showWhenStarting", False) 
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", 
         "application/pdf") 

    self.driver = webdriver.Firefox(firefox_profile=fp) 
    self.longMessage = True 

但是,仍然出現文件對話框。我已經完成了很多切換字段的開關操作,但經過一番挖掘,我發現Selenium生成的默認Firefox配置文件的prefs.js文件與我手動檢查的prefs.js文件之間沒有區別在下載對話框中「從此開始自動爲此類型的文件執行此操作」。

mimeTypes.rdf文件確實發生了改變,不過,具體而言,以下行添加:

<RDF:Description RDF:about="urn:mimetype:handler:application/pdf" 
       NC:alwaysAsk="false" 
       NC:saveToDisk="true" 
       NC:handleInternal="false"> 
<NC:externalApplication RDF:resource="urn:mimetype:externalApplication:application/pdf"/> 

我不知道的方式創建一個新的Firefox配置文件時,設置自定義mimeTypes.rdf文件,但是。有人有什麼主意嗎?

爲了阻止任何人提出我剛勾選下載URL,該文件爲用戶生成,我需要需要來明確驗證.pdf文件是否已下載到驅動器。

+0

我也一直在尋找真正難解決。我發現這個https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/95 – IndranilGayen

+0

我使用Firefox版本50.1.0。和RSelenium。出現提示時無法下載。然而,在幾種情況下,它的工作。我會寫回復相同的回覆。 – IndranilGayen

回答

-1

您可以通過鏈接創建從互聯網下載文件的其他方法。

舉例frommy C#代碼:

public Bitmap Image 
     { 
      get 
      { 
       string webPath = Element.GetAttribute("src"); 

       if (webPath != string.Empty) 
       { 
        try 
        { 
         System.Net.WebRequest request = 
          System.Net.WebRequest.Create(webPath); 

         System.Net.WebResponse response = request.GetResponse(); 

         System.IO.Stream responseStream = response.GetResponseStream(); 

         Bitmap bitmapImg = new Bitmap(responseStream); 

         return bitmapImg; 
        } 
        catch (System.Net.WebException) 
        { 
        } 
       } 

       return new Bitmap(1,1); 
      } 
     } 

所以你看,在這段代碼中,我從圖像元素獲得src屬性和瀏覽器extarnally下載它來獲得絕對正確的位圖圖像(在此之後我可以將它保存到HDD)。 以相同的方式,你可以從鏈接下載任何文件=)

+0

我試圖在原始文章中隱藏這個答案 - 文件是在用戶單擊按鈕時生成的。我無法搶先獲得下載鏈接。 :( – Staunch

+0

@Staunch,你可以通過點擊按鈕獲得鏈接並下載。問題出在哪裏? – Andrew

+2

如何獲取鏈接?這是'javascript'方法和'ajax'請求。 – cprn

2

我是R用戶,所以只需在R中使用RSelenium發佈我的解決方案。如果你不能在Python中轉換相同的東西,請讓我知道我會暗示相同的。

known_formats <- c("application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 


firefox_profile.me <- makeFirefoxProfile(list(marionette = TRUE, 
               # this is for certificate issues [may be ignored] 
               webdriver_accept_untrusted_certs = TRUE, 
               webdriver_assume_untrusted_issuer = TRUE, 
               # download related settings 
               browser.download.folderList = 2L, 
               browser.download.manager.showWhenStarting = FALSE, 
               # put your path here but remember to give path like C:\\DirOfYourChoice and not C:\\DirOfYourChoice\\ [last \\ is not going to work] 
               browser.download.dir = normalizePath("TestDL"), 
               browser.helperApps.alwaysAsk.force = FALSE, 
               browser.helperApps.neverAsk.openFile = paste0(known_formats, collapse = ","), 
               browser.helperApps.neverAsk.saveToDisk = paste0(known_formats, collapse = ","), 
               browser.download.manager.showWhenStarting = FALSE, 
               # this is for marionette and related security 
               "browser.tabs.remote.force-enable" = TRUE, 
               pdfjs.disabled = TRUE)) 

remDr <- remoteDriver(remoteServerAddr = "localhost", 
         port = 4444, 
         browserName = "firefox", 
         extraCapabilities = firefox_profile.me) 

remDr$open() 

remDr$navigate("https://www.google.com/search?q=sample+xlsx") 

remDr$findElement(using = "css selector", value = ".g:nth-child(1) a")$clickElement() 

remDr$navigate("https://www.google.com/search?q=test+xls") 

remDr$findElement(using = "css selector", value = ".g:nth-child(1) a")$clickElement() 

做工精細我 我使用

Firefox 50.1.0 [while I'm writing this post] 
Selenium [3.0.1] 
R [3.3.2 (2016-10-31)] 

希望你能夠端口這蟒蛇。只是試圖複製在Firefox makeFirefoxProfile

參考做進一步的瞭解的配置: -
How to Download files using Selenium
Firefox Profile Settings in Selenium

相關問題