当前位置: 首页 > 面试题库 >

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

孙玺
2023-03-14
问题内容

我正在使用使用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并导航。但是,当我单击按钮下载文件时,有时会将文件(部分保存为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

鉴于所有链接都在Windows中,但是我的selenium在docker容器或Ubuntu中运行,因此我可以理解为什么这种方法不起作用。

我的设置:R在Windows上运行,并且我有一个包含selenium服务器的Ubuntu Docker镜像。

编辑: 原来我的问题是因为在主机上没有安装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 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 HOST上的目录(/ home / john / test)映射到容器上的目录(/ home
/ seluser / Downloads)。

然后,我们需要向Firefox配置文件中添加必要的信息:

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"


 类似资料:
  • 我开始在MacOS上运行Docker,我刚刚安装了一个WordPress容器,并使其在本地运行。但真正的WordPress文件到底在哪里?

  • 问题内容: 我在服务器上找不到PHP.ini位置。我已经检查了所有堆栈溢出的答案,但是找不到php.ini位置。 我有Linux,Cent OS,zPanel。最新版本的PHP。 我的电脑:Linux Mint 15 KDE。 问题答案: 在终端机/控制台中(仅Linux,在Windows中,您需要Putty) 它会向您显示这样的内容。 替代方法 您可以在您的网站上创建一个php文件,该文件运行:

  • 问题内容: 给定文件或目录的路径,如何确定该文件的安装点?例如,如果作为文件系统挂载,则给定文件名,我想知道它存储在根目录下。 这将是C ++语言,我希望避免通过调用外部命令。该代码应该健壮-不一定要防止故意的篡改,但绝对要面对嵌套的安装点,符号链接等。 我还没有找到一个简单的系统调用来执行此操作。看来我得自己写支票。这是我计划的粗略概述。 在shell命令中规范化文件名。 怎么样? 与&合作阅读

  • 问题内容: 我已经从https://nodejs.org/en/直接将Node.js下载到我的Ubuntu桌面操作系统上。我可以轻松地将文件解包,并且可以看到节点目录:bin,include,lib,share。我猜我的下载文件夹不会是最终安装位置。 我的猜测是将所有目录复制到, 但是我不确定。 这些文件在哪里?(我已经尝试过下载文件中的readme.md文件以及该站点上的文档。我本以为在node

  • 问题内容: 在为Mac安装docker之后,我正在Mac上寻找文件夹。 随着 我得到 但是我的主机上没有目录。 我已经检查过了,但是找不到任何东西。知道它在哪里吗? 问题答案: 看到这个答案 使用Docker for Mac Application时,容器似乎存储在位于以下位置的VM中: 〜/ Library / Containers / com.docker.docker / Data / co

  • 我用Android Studio创建了一个应用程序,它有一个数据库文件处理程序。我看了几个帖子,到处都是他们说去数据\data\folder获取应用程序文件夹。但我的应用程序没有显示任何文件夹。我必须手动设置要创建的文件位置吗?如何找到database.db文件?