RSelenium:使用Chrome下载文件时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSelenium:使用Chrome下载文件时出错相关的知识,希望对你有一定的参考价值。

我正在使用RSelenium下载一些.xls文件。我能够使用以下代码设置服务器获得一个有点可通过的解决方案,该服务器指定在我单击下载链接以及将文件下载到何处时不创建弹出窗口。但是,一旦我下载了第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()


}

作为参考,我正在下载的网站如下所示:http://www.moscow_city.vybory.izbirkom.ru/region/moscow_city?action=show&root=774001001&tvd=4774001137463&vrn=4774001137457&prver=0&pronetvd=null&region=77&sub_region=77&type=427&vibid=4774001137463

用于下载的链接为那些不懂俄语的人写了“Версиядляпечати”。

我不能简单地在对话框开始弹出时停止该功能并从我离开的地方拿起,因为它是一个较大的功能的一部分,从下拉菜单中删除链接导致从下载链接到站点的链接。这也非常烦人,因为有400多个文件需要下载。

有什么方法可以改变Chrome配置文件或我的抓取功能,以防止系统对话框弹出每101个文件?或者是否有更好的方法来下载这些文件?

答案

不需要Selenium:

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:使用Chrome下载文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

在Linux下由cron运行时RSelenium失败 - 为什么?

RSelenium错误“无法创建新服务:ChromeDriverService”

使用RSelenium执行拖放操作

chrome 检查更新时出错:无法启动更新检查

如何在 Linux 服务器上使用 Rselenium

getJSON 在 chrome 上本地加载 json 数据文件时出错 [重复]