RSelenium:使用 Chrome 下载文件时出错
RSelenium: Error while downloading files with Chrome
我正在使用 RSelenium 下载一些 .xls 文件。我能够使用下面的代码来设置服务器,得到一个有点过得去的解决方案,它指定当我点击下载 link 时不创建弹出窗口以及文件下载到的位置。然而,毫无疑问,一旦我下载了第 101 个文件(另存为“report (100).xls”),下载弹出窗口就会开始出现在 Selenium 驱动的浏览器中。
eCaps <- list(
chromeOptions =
list(prefs = list(
"profile.default_content_settings.popups" = 0L,
"download.prompt_for_download" = FALSE,
"download.default_directory" = "mydownloadpath"
)
)
)
rd <- rsDriver(browser = "chrome", port=4566L, extraCapabilities = eCaps)
下载的函数如下所示:
vote.downloading <- function(url){
#NB: this function assumes browser already up and running, options set correctly
Sys.sleep(1.5)
browser$navigate(url)
down_button <- browser$findElement(using="css",
"table:nth-child(4) tr:nth-child(3) a")
down_button$clickElement()
}
对于不懂俄语的人,用于下载的 link 显示为“Версия для печати”。
我不能在对话框开始弹出时简单地停止该功能并从我离开的地方继续,因为它是一个更大的功能的一部分,它从下拉菜单中删除 links 导致下载的站点 link。这也会非常烦人,因为要下载 400 多个文件。
有什么方法可以更改 Chrome 配置文件或我的抓取功能以防止系统对话框每 101 个文件弹出一次?或者是否有更好的方法来下载这些文件?
不需要硒:
library(httr)
httr::GET(
url = "http://www.moscow_city.vybory.izbirkom.ru/servlet/ExcelReportVersion",
query = list(
region="77",
sub_region="77",
root="774001001",
global="null",
vrn="4774001137457",
tvd="4774001137463",
type="427",
vibid="4774001137463",
condition="",
action="show",
version="null",
prver="0",
sortorder="0"
),
write_disk("/tmp/report.xls"), ## CHANGE ME
verbose()
) -> res
我将它保存到一个对象中,这样你就可以运行 warn_for_status()
或其他类似的检查。
将其包装在带有参数的函数中以使其更通用应该很简单。
我正在使用 RSelenium 下载一些 .xls 文件。我能够使用下面的代码来设置服务器,得到一个有点过得去的解决方案,它指定当我点击下载 link 时不创建弹出窗口以及文件下载到的位置。然而,毫无疑问,一旦我下载了第 101 个文件(另存为“report (100).xls”),下载弹出窗口就会开始出现在 Selenium 驱动的浏览器中。
eCaps <- list(
chromeOptions =
list(prefs = list(
"profile.default_content_settings.popups" = 0L,
"download.prompt_for_download" = FALSE,
"download.default_directory" = "mydownloadpath"
)
)
)
rd <- rsDriver(browser = "chrome", port=4566L, extraCapabilities = eCaps)
下载的函数如下所示:
vote.downloading <- function(url){
#NB: this function assumes browser already up and running, options set correctly
Sys.sleep(1.5)
browser$navigate(url)
down_button <- browser$findElement(using="css",
"table:nth-child(4) tr:nth-child(3) a")
down_button$clickElement()
}
对于不懂俄语的人,用于下载的 link 显示为“Версия для печати”。
我不能在对话框开始弹出时简单地停止该功能并从我离开的地方继续,因为它是一个更大的功能的一部分,它从下拉菜单中删除 links 导致下载的站点 link。这也会非常烦人,因为要下载 400 多个文件。
有什么方法可以更改 Chrome 配置文件或我的抓取功能以防止系统对话框每 101 个文件弹出一次?或者是否有更好的方法来下载这些文件?
不需要硒:
library(httr)
httr::GET(
url = "http://www.moscow_city.vybory.izbirkom.ru/servlet/ExcelReportVersion",
query = list(
region="77",
sub_region="77",
root="774001001",
global="null",
vrn="4774001137457",
tvd="4774001137463",
type="427",
vibid="4774001137463",
condition="",
action="show",
version="null",
prver="0",
sortorder="0"
),
write_disk("/tmp/report.xls"), ## CHANGE ME
verbose()
) -> res
我将它保存到一个对象中,这样你就可以运行 warn_for_status()
或其他类似的检查。
将其包装在带有参数的函数中以使其更通用应该很简单。