簡體   English   中英

Docker上的RSelenium:文件下載在哪里?

[英]RSelenium on docker: where are files downloaded?

我正在使用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")})

它可以工作,我可以連接到任何網址並導航。 但是,當我單擊按鈕下載文件時,它有時將其保存(部分保存為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容器是運行它的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 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()

我們可以檢查下載是否在HOST機器上:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM