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

时间:2017-12-18 17:31:08

标签: r web-scraping download rselenium

我正在使用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个文件?或者是否有更好的方法来下载这些文件?

1 个答案:

答案 0 :(得分:1)

不需要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()或其他此类检查。

在带有参数的函数中将它包装起来以使其更通用是很简单的。