Rselenium 无法连接到 运行 闪亮的应用程序
Rselenium can't connect to running shiny app
我在 docker 中配置了 selenium 服务器。它工作正常 - 我可以连接到它,但是当我想与 运行ning 本地闪亮应用 Rselenium 交互时看不到它。详情如下:
我一步一步做的:
我运行硒服务器:
docker run -d -p 4445:4444 selenium/standalone-chrome
成功连接到 selenium 服务器:
remDr <- remoteDriver(remoteServerAddr = "localhost"
, port = 4445L
, browserName = "chrome"
, platform = "MAC")
> remDr$open()
[1] "Connecting to remote server"
- 运行 来自终端的闪亮应用(在单独的 r 会话中):
> shiny::runApp(file.path(find.package("RSelenium"), "apps", "shinytestapp"), port = 6012)
Listening on http://127.0.0.1:6012
- 然后尝试做一些测试:
remDr$navigate("localhost:6012")
appTitle <- remDr$getTitle()[[1]]
expect_equal(appTitle, "Shiny Test App")
出现错误:
Error: 'appTitle' not equal to "Shiny Test App".
1/1 mismatches
x[1]: "localhost"
y[1]: "Shiny Test App"
- 毕竟我截图了:
remDr$screenshot(display = TRUE)
看起来像这样:
您知道为什么 RSelenium 在本地看不到闪亮的应用 运行ning 吗?
有多种方法可以实现这一点。最简单的方法是 运行 docker 在 --net=host
模式。这意味着默认端口 4444
上的 selenium 服务器 运行s
docker run -d --net=host selenium/standalone-chrome&
您的 docker 容器现在可以访问 HOST 本地主机。
在非默认端口上 运行 你可以传递 docker 一个 selenium 环境变量:
docker run -d --net=host -e SE_OPTS="-port 4445" selenium/standalone-chrome
我通过@jdharrison的大量帮助解决了这个问题。
首先制作docker compose文件(注意缩进-一个缩进必须是2个空格)并保存为docker-compose.yml
:
version: '2'
services:
ropensci:
image: rocker/ropensci
ports:
- "8788:8787"
links:
- selenium:selenium
- shiny:shiny
selenium:
image: selenium/standalone-chrome
ports:
- "4445:4444"
links:
- shiny:shiny
shiny:
image: rocker/shiny
container_name: shiny
volumes:
- ~/Users/username/services/volumes/shiny/apps:/srv/shiny-server/
- ~/Users/username/services/volumes/shiny/logs:/var/log/
- ~/Users/username/services/volumes/shiny/packages:/home/shiny/
或下载:https://codeshare.io/2j4yLB
然后 运行 docker-compose up
来自 docker-compose.yml
文件所在的文件夹。
- 将您的应用程序添加到
/home/username/services/volumes/shiny/apps
- 要从 selenium 导航到您的应用,请使用
http://shiny:3838/myapp
要检查它是否有效,您可以将下面的代码保存为 app.R
,位于:~/Users/username/services/volumes/shiny/apps/example/
:
library(shiny)
server <- function(input, output) {
output$distPlot <- renderPlot({
hist(rnorm(input$obs), col = 'darkgray', border = 'white')
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100)
),
mainPanel(plotOutput("distPlot"))
)
)
shinyApp(ui = ui, server = server)
和运行:
library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "selenium", port = 4444L, browser = "chrome")
remDr$open()
remDr$navigate(url = "http://shiny:3838/example")
remDr$screenshot(display = TRUE)
如果一切正常你应该看到截图:
我在 docker 中配置了 selenium 服务器。它工作正常 - 我可以连接到它,但是当我想与 运行ning 本地闪亮应用 Rselenium 交互时看不到它。详情如下:
我一步一步做的:
我运行硒服务器:
docker run -d -p 4445:4444 selenium/standalone-chrome
成功连接到 selenium 服务器:
remDr <- remoteDriver(remoteServerAddr = "localhost"
, port = 4445L
, browserName = "chrome"
, platform = "MAC")
> remDr$open()
[1] "Connecting to remote server"
- 运行 来自终端的闪亮应用(在单独的 r 会话中):
> shiny::runApp(file.path(find.package("RSelenium"), "apps", "shinytestapp"), port = 6012)
Listening on http://127.0.0.1:6012
- 然后尝试做一些测试:
remDr$navigate("localhost:6012")
appTitle <- remDr$getTitle()[[1]]
expect_equal(appTitle, "Shiny Test App")
出现错误:
Error: 'appTitle' not equal to "Shiny Test App".
1/1 mismatches
x[1]: "localhost"
y[1]: "Shiny Test App"
- 毕竟我截图了:
remDr$screenshot(display = TRUE)
看起来像这样:
您知道为什么 RSelenium 在本地看不到闪亮的应用 运行ning 吗?
有多种方法可以实现这一点。最简单的方法是 运行 docker 在 --net=host
模式。这意味着默认端口 4444
docker run -d --net=host selenium/standalone-chrome&
您的 docker 容器现在可以访问 HOST 本地主机。
在非默认端口上 运行 你可以传递 docker 一个 selenium 环境变量:
docker run -d --net=host -e SE_OPTS="-port 4445" selenium/standalone-chrome
我通过@jdharrison的大量帮助解决了这个问题。
首先制作docker compose文件(注意缩进-一个缩进必须是2个空格)并保存为docker-compose.yml
:
version: '2'
services:
ropensci:
image: rocker/ropensci
ports:
- "8788:8787"
links:
- selenium:selenium
- shiny:shiny
selenium:
image: selenium/standalone-chrome
ports:
- "4445:4444"
links:
- shiny:shiny
shiny:
image: rocker/shiny
container_name: shiny
volumes:
- ~/Users/username/services/volumes/shiny/apps:/srv/shiny-server/
- ~/Users/username/services/volumes/shiny/logs:/var/log/
- ~/Users/username/services/volumes/shiny/packages:/home/shiny/
或下载:https://codeshare.io/2j4yLB
然后 运行 docker-compose up
来自 docker-compose.yml
文件所在的文件夹。
- 将您的应用程序添加到
/home/username/services/volumes/shiny/apps
- 要从 selenium 导航到您的应用,请使用
http://shiny:3838/myapp
要检查它是否有效,您可以将下面的代码保存为 app.R
,位于:~/Users/username/services/volumes/shiny/apps/example/
:
library(shiny)
server <- function(input, output) {
output$distPlot <- renderPlot({
hist(rnorm(input$obs), col = 'darkgray', border = 'white')
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100)
),
mainPanel(plotOutput("distPlot"))
)
)
shinyApp(ui = ui, server = server)
和运行:
library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "selenium", port = 4444L, browser = "chrome")
remDr$open()
remDr$navigate(url = "http://shiny:3838/example")
remDr$screenshot(display = TRUE)
如果一切正常你应该看到截图: