docker上的RSelenium:文件在哪里下载?

我正在使用Docker镜像使用Selenium:

require(RSelenium) if (length(system("docker ps -l", intern = TRUE))<2) try({system("docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.0")}) 

它的工作原理,我可以连接到任何url和导航。 但是,当我点击一个button来下载文件时,它有时会将其保存(部分保存为xxxxxxx.csv.part )到/tmp/mozilla_mozillaUser0 ,有时会保存到任何地方,或者可能找不到其他位置。

这是有原因吗?

另外我试图打开驱动程序使用

 makeFirefoxProfile(list(browser.download.dir = "D:/temp")) 

但它返回一个奇怪的错误

 Error in file(tmpfile, "rb") : cannot open the connection In addition: Warning messages: 1: running command '"zip" -r9Xjq "C:\Users\rocks\AppData\Local\Temp\RtmpoPhjUb\file31076202d4f.zip" "C:\Users\rocks\AppData\Local\Temp\RtmpoPhjUb/firefoxprofile/prefs.js" ' had status 127 2: In file(tmpfile, "rb") : cannot open file 'C:\Users\rocks\AppData\Local\Temp\RtmpoPhjUb\file31076202d4f.zip': No such file or directory 

在那里我可以理解为什么这不工作,因为所有的链接都在窗口中,但我的selenium运行在docker集装箱或Ubuntu中。

我的设置:运行在Windows上,我有一个包含selenium服务器的Ubuntu的docker图像。

编辑: 事实certificate我的问题是因为主机上没有安装firefox (这在理论上是不需要的)。 我通过使用(而不是调用makeFirefoxProfile )来解决这个问题:

 fprof = structure(list(firefox_profile = "UEsDBBQAAAAIANJiVEobimJN8QAAABkCAAAIAAAAcHJlZnMuanOFkT9PwzAQxXckvkOUCSQnlliZkDqygcSITHyJTW3fyXdNIj49btqBoLTd7t57v/OfOzDkT8rQP9RfGafStRanFNDY1vpcq6rWDiNohnDM6t3Z5frx+f7uGt5jsJBfPUuZ8nQrHU0yQxHY4fThIL2JyeLTUNjeBIYLvINAkF+IuE0wlor3LZsR3nHneX+8fjwE8VSG6bn58aQMUfCdEY9J/+tPiabDWA5hBrs2LxmRJ8xrqeNRCcyyFD6Wl2lKQ3UuvwkGVf3Nk+1VtQBOYjihFIxPqlrlYO4grNExlc/jZsOZt8XIGzJ2AtKwZDBx2ewvUEsBAj8AFAAAAAgA0mJUShuKYk3xAAAAGQIAAAgAJAAAAAAAAAAgAAAAAAAAAHByZWZzLmpzCgAgAAAAAAABABgAzaOo9TCL0gHdkgMtLYvSAd2SAy0ti9IBUEsFBgAAAAABAAEAWgAAABcBAAAAAA=="), .Names = "firefox_profile") remDr <- remoteDriver(extraCapabilities = ePrefs, port = 4445) 

docker容器是运行它的HOST的独立实体。 您需要将HOST上的目录映射到您将文件下载到的容器上的目录:

启动容器时可以这样做:

 docker run -d -p 4445:4444 -p 5901:5900 -v /home/john/test:/home/seluser/Downloads selenium/standalone-firefox-debug:2.53.1 

在这里(我在linux上运行docker)我已经将我的linux主机(/ home / john / test)上的一个目录映射到容器上的目录(/ home / seluser / Downloads)。

然后,我们需要添加必要的信息到Firefox的configuration文件:

 library(RSelenium) ePrefs <- makeFirefoxProfile( list( browser.download.dir = "/home/seluser/Downloads", "browser.download.folderList" = 2L, "browser.download.manager.showWhenStarting" = FALSE, "browser.helperApps.neverAsk.saveToDisk" = "multipart/x-zip,application/zip,application/x-zip-compressed,application/x-compressed,application/msword,application/csv,text/csv,image/png ,image/jpeg, application/pdf, text/html,text/plain, application/excel, application/vnd.ms-excel, application/x-excel, application/x-msexcel, application/octet-stream")) remDr <- remoteDriver(extraCapabilities = ePrefs, port = 4445) remDr$open() remDr$navigate("http://www.colorado.edu/conflict/peace/download/") firstzip <- remDr$findElement("xpath", "//a[contains(@href, 'zip')]") firstzip$clickElement() 

我们可以检查下载是否在主机上:

 > list.files("/home/john/test/") [1] "peace.zip"