You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Watir自动化脚本遇Browsing context has been discarded错误如何解决

错误原因分析
  • 这个Browsing context has been discarded属于NoSuchWindowError的子类,核心是WebDriver进程未能绑定到有效的Firefox浏览上下文,目标窗口在初始化或页面跳转阶段就被销毁
  • 你用到的headless Ruby gem是依赖Xvfb模拟显示输出的旧方案,高版本Firefox(94+)和Geckodriver(0.30+)已经原生支持无头模式,和旧Xvfb方案存在兼容性问题,这是你两种语言脚本都报错的核心原因
可行解决方案

方案1:替换为Firefox原生无头模式(推荐)

直接移除headless gem的依赖,修改代码为原生无头启动,示例代码:

require 'watir'

# 配置Firefox启动参数
options = Selenium::WebDriver::Firefox::Options.new
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--start-maximized')

browser = Watir::Browser.new :firefox, options: options
browser.goto 'https://www.google.com'
search_text = "Watir"
# 增加显式等待避免元素未加载导致的后续错误
browser.text_field(name: "q").wait_until(&:present?).set search_text
browser.button(name: "btnK").wait_until(&:present?).click

方案2:保留Xvfb方案的修复步骤

如果你必须使用旧的headless gem,按以下步骤排查:

  • 先手动启动Xvfb服务并配置环境变量:
    sudo Xvfb :99 -ac -screen 0 1920x1080x16 &
    export DISPLAY=:99
    
  • 给geckodriver添加执行权限,并确认其路径在系统PATH中:
    sudo chmod +x /path/to/your/geckodriver
    
  • 启动浏览器后加1-2秒的等待再执行goto操作,预留足够的上下文初始化时间:
    require 'watir'
    require 'headless'
    headless = Headless.new
    headless.start
    browser = Watir::Browser.new :firefox
    sleep 2
    browser.goto 'https://www.google.com'
    

内容的提问来源于stack exchange,提问作者Pritalgo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:08