在Ruby版Selenium Chromedriver中配置CPUThrottlingRate限速的方法
解决方案
Ruby版本Selenium 4.x的devtools#send_cmd方法仅接受1个Hash类型参数,参数内需同时指定CDP方法名和对应参数,正确写法如下:
browser = Selenium::WebDriver.for :chrome, options: options devtools = browser.devtools # 正确传参格式:将方法名和参数分别放在method和params键下 devtools.send_cmd( method: 'Emulation.setCPUThrottlingRate', params: { rate: 10 } )
报错原因说明
- 首次报错是因为你给
send_cmd传了方法名、参数两个独立参数,不符合Ruby版API的参数要求; - 调整为单参数后报错是因为参数结构不对,CDP接口无法识别到
rate字段; - 直接在driver实例调用
send_cmd报错是因为该方法属于devtools实例,不是driver实例的原生方法。
完整集成示例
你可以将CPU节流逻辑和现有网络限速逻辑整合,根据不同的throttling等级匹配对应的CPU降速倍率:
# 原有网络限速逻辑之后添加以下代码 # 配置对应等级的CPU降速倍率:1为不限速,数值越大速度越慢 cpu_throttling_rate = case throttling when 'slow' 10 when 'regular' 2 when 'fast' 1 end devtools = browser.devtools devtools.send_cmd( method: 'Emulation.setCPUThrottlingRate', params: { rate: cpu_throttling_rate } ) return browser
你使用的ChromeDriver v92版本完全支持Emulation.setCPUThrottlingRate CDP命令,调整写法后即可同时实现网络限速和CPU性能限制的模拟需求。
内容的提问来源于stack exchange,提问作者Mini John
相关产品推荐
相关产品推荐

