2015-08-28 46 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

相关问题