【问题标题】:RSelenium findElement works with firefox:2.53.1 but not with firefox:latestRSelenium findElement 适用于 firefox:2.53.1 但不适用于 firefox:latest
【发布时间】:2021-10-26 01:34:32
【问题描述】:

我像这样使用 docker 运行 Selenium:

docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.1

以下 R 脚本中的这一行 remDr$findElement(using = "class", "percent") 工作正常。

library("tidyverse")
library("RSelenium")

# A Selenium server has to be running
# Works with: docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.1
# Fails with: docker run -d -p 4445:4444 selenium/standalone-firefox:latest

remDr <- remoteDriver(port = 4445L)
remDr$open()

remDr$navigate("https://www.alternabank.ca/everyday-banking/high-interest-esavings")
webElem <- remDr$findElement(using = "class", "percent")
tmp <- webElem$getElementText()

remDr$close()

我杀死那个容器然后做:docker run -d -p 4445:4444 selenium/standalone-firefox:latest

然后再次运行相同的代码。这会导致错误:

> webElem <- remDr$findElement(using = "class", "percent")
Error in .self$value[[1]] : subscript out of bounds

这是为什么?如何让我的旧代码与最新版本的 Firefox 一起使用。我需要更新的版本才能进行其他操作。

我还看到linux进程的名字从“firefox”变成了“Gecko”。

【问题讨论】:

  • 远程服务器是否正确启动? Selenium 是出了名的难以正确退出。 stackoverflow.com/questions/43991498/… 会不会是一个端口已经在使用?
  • 我认为 Selenium 服务器正常启动。在两个容器之间切换时,如果我不杀死旧容器,我会收到一个端口正在使用错误,所以我认为这不是问题。
  • 你试过了吗:docker run -d -p 4445:4444 --shm-size="2g" selenium/standalone-firefox:latest? (给它一些额外的内存)
  • 我在 Digital Ocean 上监测了 RAM 使用情况,没关系。
  • 我更新到最新版本,它也破坏了我的代码。 Win10 桌面没有 Digital Ocean 和一个完全不同的网站。

标签: r docker selenium rselenium selenium-docker


【解决方案1】:

当您使用以下命令启动 Selenium 时:

docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.1

实际上,selenium/standalone-firefox:2.53.0 使用:

  • 旧版 Firefox 浏览器和版本介于 Firefox 45.xFirefox 47.x
  • 如果您自己配置了 docker 容器,则可以在构建时指定自己的 FIREFOX_VERSION
  • Marionette 基于 GeckoDriver 不是强制性的。

所以,程序执行没有问题。


但是当你使用命令启动 Selenium 时:

docker run -d -p 4445:4444 selenium/standalone-firefox:latest

基于GeckoDriverMarionette 开始发挥作用。

旧版 Firefox 浏览器 的早期运行方式与 GeckoDriver 当前驱动 浏览器的方式之间存在相当大的更新/修改/更改。 p>

这也应该可以解释为什么您看到 linux 进程的名称从“firefox”变为“Gecko”

另外,GeckoDriver需要与Firefox浏览器保持同步,相关详细讨论可以在Selenium: How selenium identifies elements visible or not? Is is possible that it is loaded in DOM but not rendered on UI?


TL;博士

StandaloneFirefox 2.53.0 image hosted on hub.docker.com was updated and broke internal build

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2018-09-08
    • 2014-11-17
    • 2012-06-23
    • 2015-06-09
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多