我在 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)
我现在遇到了完全相同的问题并正在寻找想法。 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
从那里我可以构建并打开远程驱动程序对象
我遇到了同样的问题,@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上,你可能可以忽略这一点)。