【问题标题】:download file with Rselenium & docker toolbox使用 Selenium 和 docker 工具箱下载文件
【发布时间】:2017-07-25 05:54:52
【问题描述】:

我正在尝试通过 Rselenium 下载文件,但看起来不可能。即使有一个简单的示例,我也无法下载:

1) 我已经安装了 docker 工具箱 (https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-docker.html)

2) 我运行了 firefox 独立映像:3.1.0,现在我正在测试旧的 2.52.0

3) 我已经在我的 R X64 3.3.2 上安装了 rselenium 包,并且我阅读了 stackoverflow 上的所有问题和答案

4) 我试过下面的代码,顺便说一下,当我分析 Firefox 选项 about:config 时,我没有找到“browser.download.dir”选项:

require(RSelenium)
fprof <- makeFirefoxProfile(list(browser.download.dir = "C:/temp"
                             ,  browser.download.folderList = 2L
                             , browser.download.manager.showWhenStarting     = FALSE
                             , browser.helperApps.neverAsk.saveToDisk =  "application/zip"))
remDr <- remoteDriver(browserName = "firefox",remoteServerAddr = "192.168.99.100",port = 4445L,extraCapabilities = fprof)
remDr$open(silent = TRUE)
remDr$navigate("https://www.chicagofed.org/applications/bhc/bhc-home")
# click year 2012
webElem <- remDr$findElement("name", "SelectedYear")
webElems <- webElem$findChildElements("css selector", "option")
webElems[[which(sapply(webElems, function(x){x$getElementText()}) == "2012" )]]$clickElement()

# click required quarter

webElem <- remDr$findElement("name", "SelectedQuarter")
Sys.sleep(1)
webElems <- webElem$findChildElements("css selector", "option")
webElems[[which(sapply(webElems, function(x){x$getElementText()}) == "4th Quarter" )]]$clickElement()

# click button

webElem <- remDr$findElement("id", "downloadDataFile")
webElem$clickElement()

6) 我没有错误但我没有文件

7) 最后,我想通过 Rselenium 下载此页面上的 excel 文件:

[链接]https://app2.msci.com/products/indexes/performance/country_chart.html?asOf=Feb%2028,%202010&size=30&scope=C&style=C&currency=15&priceLevel=0&indexId=83#

【问题讨论】:

  • 下载目录将位于 docker 容器上,该容器是一个 linux 容器。然后,此位置将映射到主机上的适当目录(在您的情况下为 windows)
  • 您将主机上的 C://test 映射到容器上的 /downloads。容器上没有文件夹 /downloads。在容器上映射到的适当文件夹是 /home/seluser/Downloads
  • 答案:docker exec -t -i containername /bin/bash link
  • /downloads在根目录下seluser是容器中运行firefox浏览器的用户可以访问吗?
  • 我设置了 browser.download.dir="/home/seluser/Downloads" 并且我使用的是 2.52.0 版本但仍然是空的:我快疯了

标签: r docker download rselenium


【解决方案1】:

如果您在 Windows 上使用 Docker 工具箱,您可能会遇到映射卷的问题,请参阅 Docker : Sharing a volume on Windows with Docker toolbox

如果您在 Mac 或 Windows 上使用 Docker Machine,您的 Docker 守护程序只能有限地访问您的 OS X 或 Windows 文件系统。 Docker Machine 尝试自动共享您的 /Users (OS X) 或 C:\Users (Windows) 目录。

我在 Windows 10 机器上启动了 docker 工具箱的全新安装并运行了以下图像:

$ docker stop $(docker ps -aq)
$ docker rm $(docker ps -aq)
$ docker run -d -v //c/Users/john/test/://home/seluser/Downloads -p 4445:4444 -p 5901:5900 selenium/standalone-firefox-debug:2.53.1

注意:我们映射到 Users/john 空间中的一个目录。用户 john 正在运行 docker 工具箱

运行以下代码

require(RSelenium)
fprof <- makeFirefoxProfile(list(browser.download.dir = "home/seluser/Downloads"
                             ,  browser.download.folderList = 2L
                             , browser.download.manager.showWhenStarting     = FALSE
                             , browser.helperApps.neverAsk.saveToDisk =  "application/zip"))
remDr <- remoteDriver(browserName = "firefox",remoteServerAddr = "192.168.99.100",port = 4445L,extraCapabilities = fprof)
remDr$open(silent = TRUE)
remDr$navigate("https://www.chicagofed.org/applications/bhc/bhc-home")
# click year 2012
webElem <- remDr$findElement("name", "SelectedYear")
webElems <- webElem$findChildElements("css selector", "option")
webElems[[which(sapply(webElems, function(x){x$getElementText()}) == "2012" )]]$clickElement()

# click required quarter

webElem <- remDr$findElement("name", "SelectedQuarter")
Sys.sleep(1)
webElems <- webElem$findChildElements("css selector", "option")
webElems[[which(sapply(webElems, function(x){x$getElementText()}) == "4th Quarter" )]]$clickElement()

# click button

webElem <- remDr$findElement("id", "downloadDataFile")
webElem$clickElement()

并检查映射的下载文件夹

> list.files("C://Users/john/test")
[1] "bhcf1212.zip"
> 

【讨论】:

  • 干得好:我明天试试。但就我而言,即使映射的访问权限有限,下载的文件也会在容器的目录中可用。我的安装可能有问题
【解决方案2】:

最后我决定为 Windows (17.03.0) 稳定安装 docker。 我需要减少可用 cpu 的数量(减少到 1)和可用的内存(减少到 1GB)。 我也共享了我的 c(顺便说一句,必须进行密码会话,否则您无法共享目录 之后我重新启动了我的电脑 在 R 侧,不要忘记删除: remoteServerAddr = "192.168.99.100" 我得到了文件。

我现在担心的是 docker 的稳定性,有时它运行,有时不运行。

非常感谢约翰的帮助

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多