remDr$open() 使用 RSelenium 和 Docker 时挂起

问题描述 投票:0回答:2

我在 R 中有以下代码:

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

我怀疑这可能是因为我通常使用 Chrome 作为浏览器,但即使我按照以下方式将浏览器名称更改为 chrome,同样的问题:

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

然后我还尝试了以下方法:

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.

查看日志详细信息:

$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)
docker selenium-webdriver rselenium
2个回答
4
投票

我现在遇到了完全相同的问题并正在寻找想法。 RSelenium github 中有一个问题线程正在讨论这个问题(https://github.com/ropensci/RSelenium/issues/275)。我无法通过加载作为可能的修复提到的最新 wdman 版本来解决该问题。然而,作为测试的一部分,我并行运行了一个旧版本,没有任何问题,并发现移动到旧的 selenium chrome 图像(例如 4.2.2)可以修复开放挂起

所以在新服务器上我拉取了 4.2.2 镜像

docker pull selenium/standalone-chrome:4.2.2

并在 docker 命令中明确调用它

docker run -d -p 4445:4444 --shm-size 4g selenium/standalone-chrome:4.2.2

从那里我可以构建并打开远程驱动程序对象


0
投票

我遇到了同样的问题,@jnnakhara 的解决方案对我有用。

具体来说,我用的是:

docker run -d -p 4445:4444 -v /dev/shm:/dev/shm --platform linux/amd64 selenium/standalone-chrome:4.2.2

备注:

  • -v /dev/shm:/dev/shm
    部分为容器提供了额外的内存(因为 chrome 会消耗大量内存,并且除非提供更多内存,否则经常会严重崩溃)
  • --platform linux/amd64
    部分是因为我使用的是苹果硅(如果你不是在Mac上,或者在带有英特尔芯片的旧Mac上,你可能可以忽略这一点)。
© www.soinside.com 2019 - 2024. All rights reserved.