如何使用RSelenium点击JavaScript链接实现Excel文件自动下载
解决方法
你遇到的问题核心是两点:一是元素定位方式不准确,二是没有规避可能的浏览器下载弹窗拦截,以下是可直接运行的修正方案:
方案1:直接执行目标JS代码(最稳定,无需定位元素)
既然你已经知道下载按钮触发的是Open('xcl')这个JS函数,直接让浏览器执行这段代码即可,完全不需要定位按钮元素:
library(rvest) library(RSelenium) # 启动驱动,提前配置firefox无需确认直接下载csv/xls文件 eCaps <- list( firefox_profile = makeFirefoxProfile( list( browser.download.folderList = 2, # 自定义下载路径,2代表使用下面的路径 browser.download.dir = "替换为你要存文件的本地路径,比如D:/download", browser.helperApps.neverAsk.saveToDisk = "application/vnd.ms-excel,text/csv,application/csv,text/comma-separated-values" # 遇到这几类文件直接下载不弹框 ) ) ) rD <- rsDriver(browser="firefox", port=4040L, verbose=F, extraCapabilities = eCaps) remDr <- rD[["client"]] remDr$navigate("https://sinca.mma.gob.cl/cgi-bin/APUB-MMA/apub.htmlindico2.cgi?page=pageFrame&header=Las%20Condes¯opath=./RM/D13/Cal/0001¯o=0001.diario.diario&from=970508&to=090312&") Sys.sleep(5) # 等待页面加载完成 # 直接执行下载对应的JS代码,不需要定位元素 remDr$executeScript("Open('xcl');", args = list()) Sys.sleep(10) # 等待下载完成 # 关闭驱动 remDr$close() rD$server$stop()
方案2:修正定位方式后点击元素
如果一定要用点击元素的方式,修正你之前的选择器写法即可,之前的css选择器引号嵌套错误导致定位失效:
# 替换你之前的定位代码即可,其它部分和方案1一致 # 用链接文本定位,更稳定 excel <- remDr$findElement(using = "link text", value = "Excel CSV") # 可以先高亮确认选对了 excel$highlightElement() # 点击 excel$clickElement()
以上两种方案都可以成功触发下载,优先选方案1即可,不需要考虑元素定位失效的问题。
内容的提问来源于stack exchange,提问作者pierlomb08
相关产品推荐
相关产品推荐

