带有较新Firefox图像的RSelenium:无法解码来自牵线木偶的图像

时间:2018-04-16 10:09:59

标签: r selenium docker rselenium

我通过RSeleniumdocker图片standalone-firefox使用v 3.11.0。另外,我在R v 3.4.4上使用Windows 10 (64-bit)

我正面临着一个特殊的问题,似乎是任意发生的。这是我的代码:

# In the Docker Terminal
$ docker run -d -p 4445:4444 selenium/standalone-firefox:3.11.0

# In R
require(RSelenium)
require(XML)

remDr <- RSelenium::remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L)
remDr$open()

remDr$navigate("https://www.betvictor.com/")
Sys.sleep(1)
remDr$screenshot(display = TRUE)

产生以下错误:

Selenium message:Failed to decode response from marionette
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:33:15.31Z'
System info: host: '29208ebb0e68', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.89-boot2docker', java.version: '1.8.0_162'
Driver info: driver.version: unknown

Error:   Summary: UnknownError
 Detail: An unknown server-side error occurred while processing the command.
 class: org.openqa.selenium.WebDriverException
 Further Details: run errorDetails method

我做了一些关于这个主题的研究:

  1. 使用旧版本的Firefox,例如here2.53.0或使用Chrome可以解决问题。
  2. Here讨论了类似的问题,似乎使用Selnium 3.4或更高版本可能会解决该问题。
  3. 但是,我尝试使用standalone-chrome:3.11.0remDr$open()然后使用Selenium message:Unable to create new service: GeckoDriverService

    至于2.引用(RSelenium)文档:“[包]为Selenium 2.0 WebDriver提供一组R绑定”,这可能解释了为什么首先出现错误

    有没有办法解决这个问题,例如是否可以更新RSelenium包,使其使用更新版本的Selenium

1 个答案:

答案 0 :(得分:1)

此代码对我有用:

library(RSelenium)
library(png)
library(openssl)

Sys.setenv(no_proxy="127.0.0.1,localhost,192.168.0.20")

extraCapabilities <- list(proxy = list(httpProxy = "proxy-server:8081",
                                       proxyType = "MANUAL",
                                       sslProxy = "proxy-server:8081"),
                                       acceptInsecureCerts = TRUE)



remDr <- remoteDriver(remoteServerAddr = "selenium.server.de"
                      , port = 4444
                      , browserName = "firefox"
                      , extraCapabilities = extraCapabilities)

remDr$open()

remDr$navigate("http://google.com")

remDr$screenshot(file = '/tmp/test.png')

res <- remDr$getStatus()

remDr$close()

我的Docker-Selenium支持公司代理。对于正常使用情况,extraCapabilities中的这一部分不是必需的。仅当在代理后面工作时,才需要使用环境变量no_proxy。参数“ acceptInsecureCerts = TRUE”很重要,否则更新的Firefox版本会出现问题。命令“ makeFirexprofile”对我不起作用了。这通常在使用代理的说明中找到。那样行不通。 RSelenium的错误消息也没有用。提高docker容器上的日志级别更有意义。这适用于-e JAVA_OPTS =“-Dselenium.LOGGER.level = ALL”。这显示了实际发生的错误。

我希望能有所帮助。我成功使用了容器firefox-standalone:3.12。