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

使用RSelenium与Docker时remDr$open()挂起问题求助

RSelenium连接Selenium服务器故障排查

问题重现

初始代码与卡住情况

编写以下R代码尝试通过Docker启动的Selenium服务操作Firefox:

library(RSelenium)
shell('docker run -d -p 4446:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "firefox")
remDr$open()
remDr$navigate("http://www.google.com/ncr")
remDr$getTitle()

运行至remDr$open()时卡住,仅输出:

> remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "firefox")
> remDr$open()
[1] "Connecting to remote server"

无后续响应。

更换Chrome后的情况

将代码中browserName改为chrome:

remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "chrome")

执行后仍出现相同的挂起问题。

使用rsDriver的错误

尝试改用rsDriver启动服务:

driver <- rsDriver(port = 4446L, browser = "chrome", chromever = NULL)

返回错误信息:

checking Selenium Server versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking geckodriver versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking phantomjs versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
[1] "Connecting to remote server"

Selenium message:Unable to create new service: ChromeDriverService
Build info: version: '4.0.0-alpha-2', revision: 'f148142cf8', time: '2019-07-01T21:30:10'
System info: host: 'DESKTOP-HKH3SN0', ip: '10.0.0.10', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_371'
Driver info: driver.version: unknown

Could not open chrome browser.
Client error message:
     Summary: SessionNotCreatedException
     Detail: A new session could not be created.
     Further Details: run errorDetails method
Check server log for further details.

日志详情

调用errorDetails()获取日志:

$stderr
 [1] "13:03:54.084 INFO [GridLauncherV3.parse] - Selenium server version: 4.0.0-alpha-2, revision: f148142cf8"                                                                                              
 [2] "13:03:54.218 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4446"                                                                                     
 [3] "13:03:54.606 INFO [WebDriverServlet.&lt;init&gt;] - Initialising WebDriverServlet"                                                                                                                          
 [4] "13:03:55.183 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4446"                                                                                                             
 [5] "13:03:56.274 INFO [ActiveSessionFactory.apply] - Capabilities are: {"                                                                                                                                  
 [6] "  \"browserName\": \"chrome\","                                                                                                                                                                       
 [7] "  \"javascriptEnabled\": true,"                                                                                                                                                                       
 [8] "  \"nativeEvents\": true,"                                                                                                                                                                            
 [9] "  \"version\": \"\""                                                                                                                                                                                  
[10] "}"                                                                                                                                                                                                     
[11] "13:03:56.275 INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.grid.session.remote.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)"

$stdout
character(0)

解决方案

1. 修正Docker容器与浏览器的匹配

你启动的是selenium/standalone-firefox容器,该容器仅包含FirefoxDriver,无法支持Chrome浏览器会话:

  • 若要使用Chrome,停止现有容器并启动Chrome专用镜像:
    # 停止并删除旧容器(替换<容器ID>为实际ID,可通过docker ps查询)
    docker rm -f <容器ID>
    # 拉取最新Chrome镜像并启动
    docker run -d -p 4446:4444 --shm-size="2g" selenium/standalone-chrome:latest
    
    --shm-size="2g"参数用于解决Chrome容器因共享内存不足导致的崩溃问题。
  • 若继续使用Firefox,确保容器正常运行:
    docker ps
    # 若容器未运行,启动它
    docker start <容器ID>
    

2. 避免rsDriver与Docker服务冲突

rsDriver会自动启动本地Selenium服务器,若已通过Docker启动Selenium服务,请勿同时使用两者,否则会导致端口冲突或驱动不兼容:

  • 若使用Docker服务,继续用remoteDriver连接,确保browserName与容器镜像匹配;
  • 若使用rsDriver,先停止Docker容器,再指定匹配的Chrome版本:
    # 停止Docker容器(可选,若已启动)
    shell('docker stop <容器ID>')
    # 指定Chrome版本,建议设为"latest"自动匹配本地Chrome版本
    driver <- rsDriver(port = 4446L, browser = "chrome", chromever = "latest")
    remDr <- driver[["client"]]
    

3. 检查端口占用

确认4446端口未被其他程序占用,Windows下执行以下命令检查:

netstat -ano | findstr :4446

若有占用,杀掉对应进程(任务管理器中根据PID结束)或更换端口(如4447)。

4. 升级Selenium版本

你使用的Selenium Server是4.0.0-alpha-2(2019年的测试版),存在大量兼容性问题。建议使用最新稳定版的Selenium镜像,selenium/standalone-firefox或selenium/standalone-chrome的最新镜像会自带匹配的浏览器驱动和稳定版Selenium Server。

内容的提问来源于stack exchange,提问作者Aveshen Pillay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:35:31