RSelenium爬取网页时rsDriver启动服务出现一级无索引报错求助
问题场景
计划组合使用rvest与RSelenium完成网页爬取任务,执行流程如下:
- 第一步:通过
rvest爬取初始页面内容 - 第二步:借助
RSelenium实现页面内多个链接的批量点击跳转 - 第三步:跳转完成后,再次通过
rvest爬取链接对应页面的剩余所需信息
故障表现
调用rsDriver()启动服务时使用如下代码:
rD <- rsDriver(port=9515L, browser=c("chrome"), version="4.0.0-alpha-2", chromever="103.0.5060.53")
运行后抛出如下报错:
checking Selenium Server versions: BEGIN: PREDOWNLOAD BEGIN: DOWNLOAD BEGIN: POSTDOWNLOAD Error in `[[<-`(`*tmp*`, platvec, value = switch(Sys.info()["sysname"], : no such index at level 1
已完成前置配置
- 已安装JAVA环境与版本匹配的chromedriver
- 已将JAVA、chromedriver的安装路径添加至系统环境变量PATH
- 当前运行环境参数:
- 操作系统:Windows 11
- R版本:4.0.3
- Chrome浏览器版本:103.0.5060.53
解决思路
按优先级依次尝试以下方案即可解决问题:
- 移除不稳定的Selenium版本参数
你代码中指定的version="4.0.0-alpha-2"是非常早期的测试版本,本身存在平台匹配逻辑的已知bug,是触发该报错的核心诱因之一。优先删除该version参数,让函数自动拉取稳定版Selenium Server,不要使用alpha、beta类测试版启动服务。 - 绕过Windows 11系统识别兼容bug
旧版RSelenium内置的系统平台匹配表未覆盖Windows 11的系统标识返回值,会触发下标不存在的报错。在调用rsDriver()前,先在当前R会话运行如下代码临时覆写系统识别结果,该操作仅在当前R会话生效,不会修改系统或R的全局配置:# 临时适配Windows11平台识别 temp_sys <- Sys.info() temp_sys["sysname"] <- "Windows" assignInNamespace("Sys.info", function() temp_sys, ns = "base") - 关闭多余驱动自动检查逻辑
你已经手动安装了匹配Chrome版本的chromedriver,不需要函数自动下载其他浏览器驱动,启动时关闭多余驱动的检查、下载逻辑,避免版本匹配冲突,参考启动代码如下:rD <- rsDriver( port = 9515L, browser = "chrome", chromever = "103.0.5060.53", geckover = NULL, iedrver = NULL, phantomver = NULL ) - 兜底兼容方案
如果上述操作后仍报错,直接将本地安装的RSelenium升级到最新CRAN版本,适配R4.0.3的旧版RSelenium对Windows 11的兼容存在较多已知问题,升级后重试即可。
内容的提问来源于stack exchange,提问作者Max_Wlt
相关产品推荐
相关产品推荐

