使用新版Firefox镜像的RSelenium:Marionette无法解码图像
随机出现的RSelenium+Docker自动化异常排查思路
最近我在Windows 10 64位系统上,用R v3.4.4搭配Docker运行的selenium/standalone-firefox:3.11.0镜像做网页自动化,结果碰到了一个头疼的随机异常问题,相关操作步骤和代码如下:
Docker启动命令
docker run -d -p 4445:4444 selenium/standalone-firefox:3.11.0
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) # 后续交互代码被截断,但异常随机出现在操作过程中
可能的原因及解决办法
- 页面加载时机不对:固定的
Sys.sleep(1)太死板,网络波动时页面还没加载完就执行后续操作,很容易触发异常。建议换成更可靠的等待方式:- 等待页面完全加载:
remDr$waitForPageLoad(timeout = 10000)(超时10秒) - 等待目标元素出现:比如要找某个按钮,用
remDr$findElement(using = 'css', value = '.target-btn')$waitForElement(timeout = 5000)
- 等待页面完全加载:
- Docker容器资源不够:Firefox运行需要不少内存,容器内存不足时会随机崩溃。启动容器时可以加内存限制:
docker run -d -p 4445:4444 --memory=2g selenium/standalone-firefox:3.11.0 - 版本兼容性问题:R v3.4.4对应的RSelenium版本可能和Selenium 3.11.0存在兼容性小问题,建议检查RSelenium版本,试着升级到和Selenium 3.11.0匹配的版本(比如RSelenium 1.7.5)
- 图形界面不稳定:默认的Firefox镜像带界面,在Windows的Docker环境里跑图形程序可能有随机bug,试试无头模式启动:
docker run -d -p 4445:4444 -e SE_OPTS="--headless" selenium/standalone-firefox:3.11.0 - 连接会话不稳定:如果是随机断开连接,可以在R代码里加个重连的容错机制:
tryCatch({ # 这里放你的自动化操作代码 }, error = function(e) { message("遇到异常,尝试重连:", e$message) remDr$close() remDr$open() remDr$navigate("https://www.betvictor.com/") # 重新执行后续操作 })
内容的提问来源于stack exchange,提问作者niko
相关产品推荐
相关产品推荐

