首页 > 解决方案 > 如何使用自定义配置文件注册 Firefox 驱动程序以与 Capybara 一起运行?

问题描述

我尝试通过以下代码段为 Firefox 注册 selenium 驱动程序。其实我想设置自定义的用户代理,但看起来启动浏览器后,用户代理不像我预期的那样。有没有人可以看看有什么问题?非常感谢

我正在使用 * GeckoDriver 0.24 * Firefox ver 67.0 * Capybara 3.18.0 * Selenium WebDriver gem 3.142.3 运行它

Capybara.register_driver :selenium do |app|
browser = ENV['BROWSER']
  browser_sym = browser.to_sym

  options = {
    browser: browser_sym,
  }
if browser == :firefox
    profile = Selenium::WebDriver::Firefox::Profile.new
    profile['browser.download.folderList'] = 2   
    profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv'
    profile['dom.max_script_run_time'] = Configuration['browser']['wait_time']
    profile['general.useragent.override'] = 'customized user-agent' 
    profile['dom.max_chrome_script_run_time'] = Configuration['browser']['wait_time']
    profile['dom.max_script_run_time'] = Configuration['browser']['wait_time']
    options[:profile] = profile 
elsif browser == :chrome 
.....
end 
Capybara::Selenium::Driver.new(app, options)

转到启动的浏览器并通过命令检查 Firefox 开发控制台的返回结果navigator.userAgent,它返回默认值而不是自定义的用户代理。

标签: rubyseleniumselenium-webdrivercapybarageckodriver

解决方案


要在 Firefox 配置文件中设置用户代理,您的条件需要最终解析为类似

Capybara.register_driver :ff do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile['general.useragent.override'] = 'Random User Agent'

  opts = Selenium::WebDriver::Firefox::Options.new(profile: profile)

  Capybara::Selenium::Driver.new(app, browser: :firefox, options: opts)
end

您可以使用https://gist.github.com/twalpole/2f69984a5c6063aab04ea25c0aa3d2ca上的代码自己运行它


推荐阅读