求助:RSelenium连接localhost端口3918被拒绝问题的解决方法
解决RSelenium连接Chrome失败的问题
问题背景
这段运行多年的RSelenium代码突然报错,之前遇到同类问题时更新R/RStudio就能解决,但此次无效。
原代码
library(chromote) # to get the chrome version library(netstat) # to dynamically change ports library(RSelenium) # to run Selenium b <- ChromoteSession$new() browser_version <- b$Browser$getVersion()$product browser_version<-gsub(".*/","",browser_version) realVersion <- substr(browser_version,1,3) chromeVersions <- binman::list_versions("chromedriver") chromeVersions <- chromeVersions$win32 realChromeVer <-chromeVersions[which(substr(chromeVersions,1,3)==realVersion)] driver <- rsDriver(browser = 'chrome', port = free_port(random = TRUE), chromever = realChromeVer[1], verbose = F) remdr <- driver[['client']] remdr$maxWindowSize()
错误信息
Could not open chrome browser. Client error message: Undefined error in httr call. httr output: Failed to connect to localhost port 3918: Connection refused Check server log for further details. Warning message: In rsDriver(browser = "chrome", port = free_port(random = TRUE), : Could not determine server status.
解决方案
严格匹配ChromeDriver与Chrome版本
你的代码仅截取版本前3位匹配,但ChromeDriver要求与Chrome主版本完全一致(比如Chrome是114.0.5735.199,ChromeDriver也需是114.x.x.x)。可直接让RSelenium自动匹配最新兼容版本:driver <- rsDriver(browser = 'chrome', port = free_port(random = TRUE), chromever = "latest", verbose = F)或用
wdman先验证版本兼容性:library(wdman) # 查看可用ChromeDriver版本 print(binman::list_versions("chromedriver")$win32) # 启动服务并确认版本 chrome_svc <- chrome(chromever = realChromeVer[1])排查端口问题
free_port()偶尔会返回被占用的端口,手动指定常用端口(如4444)测试:driver <- rsDriver(browser = 'chrome', port = 4444, chromever = realChromeVer[1], verbose = F)同时检查系统防火墙是否阻止本地端口连接,Windows用户可通过命令行
netstat -ano | findstr :4444查看端口占用情况,若有则杀掉对应进程。升级所有相关包
旧版本的RSelenium、chromote或binman可能与新版Chrome不兼容,执行以下命令更新:update.packages(c("RSelenium", "chromote", "netstat", "binman", "wdman"), ask = FALSE)手动启动ChromeDriver服务
绕过rsDriver的自动启动逻辑,手动启动服务再连接客户端:library(RSelenium) library(wdman) # 启动ChromeDriver服务 chrome_svc <- chrome(port = 4444, chromever = realChromeVer[1], verbose = TRUE) # 连接客户端 remdr <- remoteDriver(port = 4444, browserName = "chrome") remdr$open() remdr$maxWindowSize() # 用完记得停止服务 # chrome_svc$stop()清理Chrome残留进程
打开任务管理器,杀掉所有Chrome相关进程(包括后台的chrome.exe),再重新运行代码,避免残留进程占用资源。
内容的提问来源于stack exchange,提问作者IMB
相关产品推荐
相关产品推荐

