使用Rselenium点击导出后新标签页无法下载Excel文件问题求解
RSelenium 导出Excel文件失败修复方案
核心问题修复点
- 你当前直接定位Excel导出选项的逻辑有问题:该导出菜单默认处于隐藏状态,只有点击页面上的软盘图标后才会渲染到可见DOM中,没有前置点击操作的情况下,你定位的元素实际处于不可交互状态,就算不报错也不会触发下载
- 你本地配置的Chrome下载规则对Docker容器内的Chrome实例不生效,且容器内的下载文件默认不会同步到本地,需要在Docker启动和浏览器配置时补充相关参数
- 你原代码里的
remoteServerAdd参数名拼写错误,少了末尾的r,正确参数名是remoteServerAddr - 需要给页面、动态菜单、下载进程预留等待时间,避免元素还没渲染完成、文件还没下载完成就结束进程
完整可运行代码
# 1. 启动Docker时映射本地下载目录,请把/your/local/download/path替换为你实际要存文件的本地绝对路径 shell('docker run -d -p 4444:4444 -v /dev/shm:/dev/shm -v /your/local/download/path:/home/seluser/Downloads selenium/standalone-chrome:3.141.59-20200326') # 2. 配置Chrome选项,指定下载路径、关闭下载确认弹窗 eCaps <- list( chromeOptions = list( prefs = list( "download.default_directory" = "/home/seluser/Downloads", "download.prompt_for_download" = FALSE, "download.directory_upgrade" = TRUE, "safebrowsing.enabled" = FALSE ) ) ) remDr = remoteDriver( remoteServerAddr = "localhost", port = 4444L, browser = "chrome", extraCapabilities = eCaps ) remDr$open() # 设置全局隐式等待10秒,避免元素未加载报错 remDr$setImplicitWaitTimeout(10000) # 3. 导航到目标页 remDr$navigate("http://app.ceplan.gob.pe/ConsultaCEPLAN/Reporte/Maestro/rptMaestroObjetivo.aspx?pAnoEje=2022&pTipoGobierno=E&pSector=10&pPliego=510") # 等待页面加载完成,网络不好可以适当延长等待时间 Sys.sleep(5) # 4. 先点击软盘导出按钮,触发导出菜单显示 save_btn <- remDr$findElement(using = "id", "ReportViewer1_ctl05_ctl04_ctl00") save_btn$clickElement() # 等待导出菜单渲染完成 Sys.sleep(2) # 5. 点击Excel导出选项 excel_btn <- remDr$findElement(using = "xpath", '//*[@id="ReportViewer1_ctl05_ctl04_ctl00_Menu"]/div[1]/a') excel_btn$clickElement() # 6. 等待下载完成,可根据文件大小调整等待时间 Sys.sleep(10) # 7. 关闭浏览器连接 remDr$close()
补充说明
Windows系统替换本地下载路径时,路径格式为C:\\xxx\\xxx,如果页面加载速度慢可以适当加长Sys.sleep()的秒数。
内容的提问来源于stack exchange,提问作者Ernesto Riveros Barrientos
相关产品推荐
相关产品推荐

