如何使用 Capybara & Selenium 安装 firefox 插件?

How to install firefox add-on using Capybara & Selenium?

我正在尝试在 Firefox 上安装附加组件,但是,无论我尝试了多少,都无法实现。

require 'capybara'
require 'selenium-webdriver'

Capybara.register_driver :selenium_proxy do |app|
  desired_caps = Selenium::WebDriver::Remote::Capabilities.firefox
  options = Selenium::WebDriver::Firefox::Options.new
  profile = Selenium::WebDriver::Firefox::Profile.new

  # Here is the add-on I am trying to install.
  profile.add_extension('/home/user/Downloads/try_xpath-1.3.5-fx.xpi') 
  
  options.profile = profile
  Capybara::Selenium::Driver.new(app, {
    browser: :firefox,
    desired_capabilities: desired_caps,
    options: options
  })
end

browser = Capybara::Session.new(:selenium_proxy)
browser.visit 'https://google.com'

我在这里做错了什么?浏览器访问 URL 没有安装任何附加组件。我可以从文件中手动安装附加组件。

此外,当我想添加配置文件时,出现以下错误:

Errno::ENOENT: No such file or directory @ rb_file_s_stat - /tmp/webdriver-rb-profilecopy20200815-25523-ie6apk/lock
from /home/burak/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rubyzip-2.2.0/lib/zip/entry.rb:405:in `stat'

好吧,既然还没有人回答,我将分享我是如何克服这个问题的,以防您想安装扩展。

如果其他人有更好的答案那么我可以接受他们的答案,所以如果你有更好的解决方案请回答

第一种方法

我只是在摆弄 Firefox 配置文件文件夹,我想我可以使用一个已经存在的配置文件文件夹,其中只有 extensions 文件夹。所以我删除了我想使用的配置文件文件夹中的所有其他 files/folders。

所以基本上步骤是:

  • 创建 Firefox 配置文件或使用现有配置文件。
  • 使用具有相同配置文件的浏览器安装所需的add-on。
  • 关闭浏览器。
  • 导航到相同的 Firefox 配置文件夹并删除配置文件夹中的所有其他 files/folders。
  • 然后在实例化 Selenium::WebDriver::Firefox::Profile 时使用该 Firefox 配置文件文件夹的路径,如下所示:
Capybara.register_driver :selenium_proxy do |app|
  desired_caps = Selenium::WebDriver::Remote::Capabilities.firefox
  options = Selenium::WebDriver::Firefox::Options.new
  profile = Selenium::WebDriver::Firefox::Profile.new '/path/to/firefox/profile/folder/'
  
  options.profile = profile
  Capybara::Selenium::Driver.new(app, {
    browser: :firefox,
    desired_capabilities: desired_caps,
    options: options
  })
end

browser = Capybara::Session.new(:selenium_proxy)
browser.visit 'https://google.com'

我尝试创建一个名为 profile 的文件夹,并在该文件夹内创建了另一个名为 extensions 的文件夹,方法与 Firefox 相同,并移动了所有 add-ons我想上传到 extensions 文件夹,但没有用。

我猜 Firefox 在安装 add-on 时更改了 add-on 文件,因此从 their website 下载 add-on 并尝试在配置文件文件夹中使用它不会工作。这当然是我的猜测。

第二种方法

您也可以使用:

browser = Capybara::Session.new(:selenium_proxy)
browser.driver.browser.install_addon '/path/to/addon.xpi'

我知道这看起来很乱所以你可以停止使用 Capybara 并直接使用 selenium 但是 Capybara 也有一些很酷的方法。