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

如何通过Monkey Patch拦截Selenium Driver并提取Capabilities?

解决方案

问题定位

你之前的Monkey Patch失败,核心原因是没有返回桥接实例——原create_bridge方法需要返回创建好的bridge对象,否则Driver初始化流程会中断。以下是适配Chrome和Remote驱动的通用拦截实现:

方案1:重写create_bridge方法(推荐)

此方法会拦截所有Selenium Driver子类的创建过程,自动提取Capabilities:

class Selenium::WebDriver::Driver
  # 保存原方法的引用
  original_create_bridge = instance_method(:create_bridge)

  define_method(:create_bridge) do
    # 调用原逻辑创建桥接
    bridge = original_create_bridge.bind(self).call
    # 桥接创建完成后,提取当前Driver的所有Capabilities
    capabilities = self.capabilities
    puts "[DRIVER CREATED] 已提取Capabilities:"
    capabilities.each do |key, value|
      puts "  #{key}: #{value}"
    end
    # 必须返回桥接实例,否则Driver初始化会失败
    bridge
  end
end

# 测试Chrome驱动
def create_chrome_driver
  @driver = Selenium::WebDriver.for :chrome
end

# 测试Remote驱动(替换为你的Remote服务地址)
def create_remote_driver
  @remote_driver = Selenium::WebDriver.for :remote,
    url: "http://localhost:4444/wd/hub",
    capabilities: Selenium::WebDriver::Remote::Capabilities.chrome
end

# 执行测试
create_chrome_driver
create_remote_driver

方案2:拦截Selenium::WebDriver.for入口方法

如果你更倾向于从驱动创建的入口点拦截,可使用此方案:

module Selenium
  module WebDriver
    class << self
      original_for = method(:for)

      def for(browser, *args)
        # 调用原逻辑创建Driver实例
        driver = original_for.call(browser, *args)
        # 提取并打印Capabilities
        puts "[DRIVER CREATED via #{browser}] 已提取Capabilities:"
        driver.capabilities.each do |key, value|
          puts "  #{key}: #{value}"
        end
        # 返回Driver实例,不破坏原有业务逻辑
        driver
      end
    end
  end
end

# 测试代码
create_chrome_driver
create_remote_driver

关键说明

  • 通用支持所有驱动类型:两种方案都基于Selenium的核心类扩展,无需针对Chrome/Remote单独适配。
  • 无侵入式拦截:不需要修改原有Driver创建代码,自动捕获所有Driver实例的创建事件。
  • 保留原有逻辑:所有实现都先调用原方法完成Driver初始化,再执行Capabilities提取,不会影响业务流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:14