Указать папку загрузки в RSelenium

Я использую RSelenium для перехода к веб-странице, содержащей кнопку для загрузки файла. Я использую RSelenium, чтобы нажать эту кнопку, которая загружает файл. Однако файлы по умолчанию загружаются в мою папку «Загрузки», тогда как я хочу, чтобы файл загружался в мой рабочий каталог. Я попытался указать профиль Chrome, как показано ниже, но, похоже, это не сработало:

wd <- getwd()
cprof <- getChromeProfile(wd, "Profile 1")
remDr <- remoteDriver(browserName= "chrome", extraCapabilities = cprof) 

Файл по-прежнему загружается в папку «загрузки», а не в мой рабочий каталог. Как это решить?


person user3387899    schedule 19.02.2016    source источник
comment
Возможна попытка поиска способов перемещения файла из папки загрузки в нужную папку.   -  person Bharath    schedule 19.02.2016
comment
Это уже решено в приведенной ниже ссылке [stackoverflow.com/questions/25251583/   -  person Bharath    schedule 20.02.2016
comment
Этот вопрос касается Selenium в Python. Мой вопрос касается RSelenium как пакета в R. Я понимаю, что аргумент 'browser.download.dir может решить проблему, но документация, связанная с RSelenium, похоже, не поддерживает этот аргумент...   -  person user3387899    schedule 22.02.2016
comment
Я знаю, что для firefox R поддерживает browser.download.dir, но, похоже, это не относится к хрому.   -  person user3387899    schedule 22.02.2016
comment
[stackoverflow.com/questions/34476422/ посетите эту ссылку, чтобы получить представление о том, как вы можете связать этот ответ с [этим] stackoverflow.com/questions/25251583/. Введите about:config в адресной строке firefox, чтобы изменить профиль браузера firefox и получить ответ.   -  person Bharath    schedule 22.02.2016


Ответы (3)


Решение включает в себя настройку соответствующих параметров chromeOptions, указанных на странице https://sites.google.com/a/chromium.org/chromedriver/capabilities . Вот пример на коробке с Windows 10:

library(RSelenium)
eCaps <- list(
  chromeOptions = 
    list(prefs = list(
      "profile.default_content_settings.popups" = 0L,
      "download.prompt_for_download" = FALSE,
      "download.default_directory" = "C:/temp/chromeDL"
    )
    )
)
rD <- rsDriver(extraCapabilities = eCaps)
remDr <- rD$client
remDr$navigate("http://www.colorado.edu/conflict/peace/download/")
firstzip <- remDr$findElement("xpath", "//a[contains(@href, 'zip')]")
firstzip$clickElement()
> list.files("C:/temp/chromeDL")
[1] "peace.zip"
person jdharrison    schedule 20.03.2017
comment
Это изменяет каталог загрузки при запуске; есть ли способ изменить его после того, как хром начал использовать код? @jdharrison - person xiaodai; 16.07.2017

Я пробовал альтернативы, и кажется, что первый комментарий @Bharath о том, чтобы отказаться от возни с префами (это невозможно сделать) и вместо этого переместить файл из папки загрузки по умолчанию в нужную папку путь. Хитрость в том, чтобы сделать это переносимым решением, заключается в том, чтобы определить, где находится каталог загрузки по умолчанию. os (которую вы можете получить так) — и вам нужен чтобы также найти имя пользователя:

desired_dir <- "~/Desktop/cool_downloads" 
file_name <- "whatever_I_downloaded.zip"

# build path to chrome's default download directory
if (Sys.info()[["sysname"]]=="Linux") {
    default_dir <- file.path("home", Sys.info()[["user"]], "Downloads")
} else {
    default_dir <- file.path("", "Users", Sys.info()[["user"]], "Downloads")
}

# move the file to the desired directory
file.rename(file.path(default_dir, file_name), file.path(desired_dir, file_name))
person Frederick Solt    schedule 20.03.2017
comment
Это можно сделать, установив соответствующие chromeOptions, см. пример - person jdharrison; 21.03.2017

Посмотрите этот альтернативный способ. Ваша папка загрузки должна быть пустой.

Список файлов внутри папки

down.list ‹- list.files (путь = E:/Загрузки/, all.files = T, рекурсивный = F)

Переместить все файлы в определенную папку

file.rename(from = paste0(E:/Downloads/,down.list),to = paste0(E:/1/scrape/,down.list))

Оно работает!

person Bruno Gomes    schedule 12.11.2019