2017-02-17 53 views
2

Я использую Selenium, используя Docker изображение:RSelenium on 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 

, где я могу понять, почему это desn't работа, учитывая, что все ссылки в окна, но мой селен работает в докер-контейнере или Ubuntu.

My Setup: R работает в Windows, и у меня есть изображение докеры Ubuntu, которое содержит сервер selenium.

EDIT:оказывается мой вопрос потому, что светлячок не был установлен на хост-машине (которая не нужна в теории). я установил вопрос, используя (вместо того, чтобы вызывать makeFirefoxProfile):

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

ответ

3

Контейнер Докер является отдельным лицом к хосту, который работает его. Вы должны отобразить каталог на 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) I сопоставили каталог в моем 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" 
+0

Спасибо! Мне удалось сопоставить диск. Однако при запуске вашей команды 'makeFirefoxProfile' я получаю это сообщение об ошибке: ' Ошибка в файле (tmpfile, «rb»): не удается открыть соединение Кроме того: Предупреждающие сообщения: 1: команда запуска «zip» -r9Xjq «C: \ Users \ rocks \ AppData \ Local \ Temp \ RtmpuI1GbG \ file21f47211278c.zip" "C: \ Users \ rocks \ AppData \ Local \ Temp \ RtmpuI1GbG/firefoxprofile/prefs.js" 'имеет статус 127 2: In file (tmpfile, "rb"): не может открыть файл 'C: \ Users \ rocks \ AppData \ Local \ Temp \ RtmpuI1GbG \ file21f47211278c.zip': Нет такого файла или каталога' – RockScience

+0

Похоже, что firefox не установлен на моей главной машине. Кажется, он не нужен в теории! Это немного странно, чтобы создать профиль firefox на хосте, чтобы применить его к гостевому ... – RockScience

+0

Если ваш HOST - это Windows-машина, вам понадобится почтовый индекс командной строки. Подробнее см. '? MakeFirefoxprofile'. Самый простой способ получить это - установить https://cran.r-project.org/bin/windows/Rtools/ – jdharrison