【问题标题】:How do I click a javascript "link" using rselenium to start downloading excel file?如何使用 rselenium 单击 javascript“链接”开始下载 excel 文件?
【发布时间】:2021-11-09 20:19:47
【问题描述】:

我是 R 的初学者,我一直在尝试抓取以下网站:

https://sinca.mma.gob.cl/cgi-bin/APUB-MMA/apub.htmlindico2.cgi?page=pageFrame&header=Las%20Condes&macropath=./RM/D13/Cal/0001&macro=0001.diario.diario&from=970508&to=090312&

自动开始从智利的这个空气监测站下载 excel 文件。但是,我注意到使用SelectorGadget 无法选择下载链接,发现这是因为该链接是一个javascript 链接(href="javascript:Open('xcl');">Excel CSV),如下图所示。

我的问题是有什么方法可以模拟对该 javascript 链接的点击?我已经成功地模拟了同一网站其他部分的点击,但它们不是 javascript 链接。这是我已经尝试过的:

library(rvest)
library(RSelenium)


rD <- rsDriver(browser="firefox", port=4040L, verbose=F)
remDr <- rD[["client"]]


remDr$open()
remDr$navigate("https://sinca.mma.gob.cl/cgi-bin/APUB-MMA/apub.htmlindico2.cgi?page=pageFrame&header=Las%20Condes&macropath=./RM/D13/Cal/0001&macro=0001.diario.diario&from=970508&to=090312&")
Sys.sleep(5) # give the page time to fully load


# click on excel link to start downloading file (doesnt work) ------------

xls <- remDr$findElement("xpath", "/html/body/table/tbody/tr/td/table[2]/tbody/tr[1]/td/label/span[3]/a")
xls$clickElement()
/html/body/table/tbody/tr/td/table[2]/tbody/tr[1]/td/label/span[3]/a


##### TESTING

remDr$navigate("https://sinca.mma.gob.cl/cgi-bin/APUB-MMA/apub.htmlindico2.cgi?page=pageFrame&header=Las%20Condes&macropath=./RM/D13/Cal/0001&macro=0001.diario.diario&from=970508&to=090312&")
excel <- remDr$findElement(using = "css selector", "[href*=javascript]")
#excel <- remDr$findElement(using = "css selector", '[href*="javascript:Open('xcl')"]')
excel$highlightElement() # to visually check what elemnet is selected


remDr$closeServer()
remDr$close()

我的目标是能够单击链接并开始下载 excel 文件。几天来我一直在尝试这样做,但我被卡住了,所以任何帮助都将不胜感激。

【问题讨论】:

    标签: javascript r click rselenium


    【解决方案1】:

    它在框架集内的框架内。您首先需要使用 RSelenium 通过父框架集切换到该框架。您可以使用框架 ID frMainright 来定位要切换到的元素。然后您应该能够通过使用[href*=xcl] 的css 属性= 值选择器来简单地定位href*contains 运算符,指定目标的href 属性值包含子字符串xcl

    类似于以下内容(未测试):

    frame_set <- remDr$findElement("css", "#frMain")
    remDr$switchToFrame(frame_set)
    
    child_frame <- remDr$findElement("css", "#right")
    remDr$switchToFrame(child_frame)
    
    csv_download <- remDr$findElement(using = "css", "[href*=xcl]")
    csv_download$clickElement()
    

    您可以使用浏览器开发工具 F12 查看该路径:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多