You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

搭建R+Selenium会话后执行RSelenium函数报错Error: attempt to apply non-function求助

排查与解决办法

这种情况我之前帮朋友排查过几次,大概率是初始化或环境匹配的问题,给你几个常见的排查方向和解决办法:

1. 检查remDr对象是否正确初始化

这个报错最常见的原因就是你创建的remDr不是一个有效的remoteDriver实例,而是被误赋值成了其他非函数类型的对象(比如字符串、数值之类的)。

你可以先在控制台运行:

class(remDr)

如果输出不是"remoteDriver",那说明初始化步骤出问题了。正确的初始化应该是类似这样的:

library(RSelenium)
# 方法1:手动指定驱动参数
remDr <- remoteDriver(
  remoteServerAddr = "localhost",
  port = 4444L,
  browserName = "chrome",
  chromever = "114.0.5735.90" # 替换成你浏览器对应的版本号
)
# 方法2:用rsDriver自动管理(更推荐,会自动下载匹配的驱动)
rD <- rsDriver(browser="chrome", port=4444L)
remDr <- rD$client

2. 检查RSelenium与依赖版本兼容性

不同电脑的包/驱动版本不匹配是这类跨设备问题的重灾区:

  • 先确认两台电脑的RSelenium版本是否一致:运行packageVersion("RSelenium")对比,不一致的话更新到最新版:
    install.packages("RSelenium")
    
  • 检查浏览器驱动(ChromeDriver/GeckoDriver)和浏览器版本是否匹配:比如Chrome浏览器版本是115,那ChromeDriver也必须是115.x的版本。如果用rsDriver()的话,它会自动下载对应版本的驱动,能避免这个问题。
  • 还要注意Selenium Server的版本,rsDriver()会自动处理,手动启动的话要确保Server版本和驱动兼容。

3. 排查路径与环境变量问题

如果你的浏览器驱动没有加入系统环境变量,或者初始化时没有指定正确的路径,也会导致remDr无法正常工作:

  • 手动初始化时,你可以在remoteDriver里通过extraCapabilities指定驱动路径:
    remDr <- remoteDriver(
      browserName = "chrome",
      extraCapabilities = list(
        chromeOptions = list(
          binary = "C:/Program Files/Google/Chrome/Application/chrome.exe", # 替换成你的浏览器实际路径
          args = c("--no-sandbox")
        )
      )
    )
    
  • 或者把驱动所在文件夹添加到系统环境变量的PATH里。

4. 清理残留会话与端口占用

有时候之前的Selenium会话没有正常关闭,导致端口(默认4444)被占用,新的remDr无法建立连接:

  • 先尝试关闭现有会话:
    remDr$close()
    if(exists("rD")) rD$server$stop() # 如果用rsDriver启动的话
    
  • 如果还是不行,手动杀掉占用4444端口的进程:Windows可以用任务管理器找到java.exe(Selenium Server的进程),Mac/Linux用lsof -i :4444找到PID后执行kill PID。

按照上面的步骤逐一排查,应该能解决问题。

内容的提问来源于stack exchange,提问作者Maurício Schwartsman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:31:00