如何使用 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
也有一些很酷的方法。
我正在尝试在 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
也有一些很酷的方法。