【问题标题】:RSelenium on docker: where are files downloaded?docker上的RSelenium:文件在哪里下载?
【发布时间】:2017-07-06 16:48:12
【问题描述】:

我正在使用 Selenium 使用 docker 映像:

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 上运行,我有一个 Ubuntu 的 docker 映像,其中包含 selenium 服务器。

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

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

【问题讨论】:

    标签: r selenium docker containers rselenium


    【解决方案1】:

    docker 容器是独立于运行它的主机的实体。您需要将 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 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"
    

    【讨论】:

    • 谢谢!我已经设法映射驱动器。但是,在运行 makeFirefoxProfile 命令时,我收到以下错误消息:Error in file(tmpfile, "rb") : cannot open the connection In addition: Warning messages: 1: running command '"zip" -r9Xjq "C:\Users\rocks\AppData\Local\Temp\RtmpuI1GbG\file21f47211278c.zip" "C:\Users\rocks\AppData\Local\Temp\RtmpuI1GbG/firefoxprofile/prefs.js" ' had status 127 2: In file(tmpfile, "rb") : cannot open file 'C:\Users\rocks\AppData\Local\Temp\RtmpuI1GbG\file21f47211278c.zip': No such file or directory
    • 看来是因为我的主机上没有安装firefox。理论上好像不需要!在主机上创建一个 Firefox 配置文件以将其应用到来宾上有点奇怪...
    • 如果您的主机是 Windows 机器,您将需要命令行 zip。查看?makeFirefoxprofile 了解详情。最简单的方法是安装cran.r-project.org/bin/windows/Rtools
    • 我知道的旧线程,但我想知道@jdharrison 或其他人是否能说出为什么我会收到“文件错误(tmpfile,“rb”):无法打开连接......”在 Amazon Linux 机器上运行 makeFirefoxProfile 时出现问题??
    • @jdharrison 感谢您发布此信息。我认为这对我有用,因为一切运行顺利,但是当我单击带有文件的下载按钮时,它不会显示在我指定的目录中。我认为问题是我不知道我应该映射的 docker 容器上的目录在哪里?我也在 linux 上,对 docker 非常缺乏经验。你知道它可能在哪里吗?我也在 linux 上,并且在我的主目录中有一个 selenium 文件夹,其中包含 3.141.59 .jar 文件和我的主目录中的 v.025.0 geckodriver .tar.gz 文件
    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多