Ruby/Rails配置远程Selenium报错Net::ReadTimeout求助
解决Ruby/Rails连接远程Selenium Chrome超时问题
针对你遇到的Net::ReadTimeout错误(即使Grid界面显示会话已创建),可尝试以下几个方向排查修复:
修正远程连接URL
多数Selenium standalone镜像要求连接路径为/wd/hub,直接使用根路径可能导致后续通信异常。修改URL为:driver = Selenium::WebDriver.for :remote, url: 'http://192.168.0.40:4444/wd/hub', options: options调整Ruby网络超时参数
默认的Net::HTTP超时时间可能不足以等待Chrome完全启动或响应,可手动延长超时时长:client = Selenium::WebDriver::Remote::Http::Default.new client.read_timeout = 30 # 可根据实际情况调整,比如设为60秒 driver = Selenium::WebDriver.for :remote, url: 'http://192.168.0.40:4444/wd/hub', options: options, http_client: client优化容器Chrome运行配置
容器内的Chrome易受资源限制影响,需从容器启动和代码配置两方面优化:- 重启Docker容器时添加共享内存参数,避免
/dev/shm不足导致Chrome卡顿:docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome - 在Ruby代码中启用新版headless模式并完善参数(更适配容器环境):
options = Selenium::WebDriver::Chrome::Options.new options.add_argument('--headless=new') # 新版headless兼容性更好 options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-gpu')
- 重启Docker容器时添加共享内存参数,避免
校验版本兼容性
确保本地Ruby的selenium-webdrivergem版本与Docker镜像中的Selenium版本匹配。比如镜像使用Selenium 4.x,gem也需对应4.x版本,版本差异可能引发通信协议不兼容问题。排查局域网网络稳定性
虽然会话能创建,但局域网内的网络延迟或丢包可能导致后续请求超时。可通过nc -zv 192.168.0.40 4444测试持续连通性,确认网络状态正常。
内容的提问来源于stack exchange,提问作者tkhobbes
相关产品推荐
相关产品推荐

