使用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.<init>] - 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
相关产品推荐
相关产品推荐

