如何通过 Ruby Selenium Binding(或 WATIR)创建 chrome 配置文件
How to create chrome profile via Ruby Selenium Binding(or WATIR)
我知道如何为 Firefox 创建配置文件
require 'watir'
options = Selenium::WebDriver::Firefox::Options.new
options.profile = "default"
@driver = Selenium::WebDriver.for :firefox, options: options
@b = Watir::Browser.new @driver
但是当我为 Chrome 做同样的事情时它没有创建,事实上我意识到选项(请看上面)对象甚至没有方法 profile=
所以我尝试添加配置文件如下所示(我看到人们是如何在 Java Selenium Binding 中创建的,所以我也做了同样的事情,但它在这里不起作用)
options = Selenium::WebDriver::Firefox::Options.new
options.add_argument('user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default')
@driver = Selenium::WebDriver.for :chrome, options: options
有人可以帮助我如何通过 Ruby Selenium 绑定(或 WATIR)创建 Chrome 配置文件吗?
我做了一个创建新浏览器的功能。你可以使用它。
def new_browser
if Rails.env.production?
chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
Selenium::WebDriver::Chrome.path = "/app/.apt/usr/bin/google-chrome"
Selenium::WebDriver::Chrome.driver_path = "/app/vendor/bundle/bin/chromedriver"
end
profile = Selenium::WebDriver::Chrome::Profile.new
profile['general.useragent.override'] = 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10'
driver = Selenium::WebDriver.for :chrome, :profile => profile
pid = driver.instance_variable_get(:@service).instance_variable_get(:@process).instance_variable_get(:@pid)
begin
browser = Watir::Browser.new driver
rescue => e
system("kill -9 #{@pid}")
end
return {:browser => browser , :pid => pid}
end
可以通过 Chromedrivers user-data-dir 参数使用现有配置文件或创建新配置文件。在 Watir 中,您可以通过 :args
参数传递参数:
browser = Watir::Browser.new :chrome,
args: ['user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data']
请注意,如果您尝试使用现有的默认配置文件,则不要在路径中包含 "Default" 目录。
由于您在评论中要求对水豚进行更详细的解释,我 post 将其作为答案(尽管您现在似乎已经有了一个可行的解决方案 - 抱歉延迟回答)。
在我的 rails 项目中,我通常按如下方式配置 Selenium chrome driver:
gem 'chromedriver-helper'
在 Gemfile 中(或在本地安装)。然后在 system-test 初始化器中定义
Capybara.register_driver :selenium_chrome_headless_no_sandbox do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.args << '--headless'
browser_options.args << '--disable-gpu'
browser_options.args << '--no-sandbox'
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
及以后(配置RSpec)我将其设置为使用过的driver,如:
RSpec.configure do |config|
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome_headless_no_sandbox
end
end
也许这对某人有帮助。干杯
编辑:添加了chromedriver-helper
我知道如何为 Firefox 创建配置文件
require 'watir'
options = Selenium::WebDriver::Firefox::Options.new
options.profile = "default"
@driver = Selenium::WebDriver.for :firefox, options: options
@b = Watir::Browser.new @driver
但是当我为 Chrome 做同样的事情时它没有创建,事实上我意识到选项(请看上面)对象甚至没有方法 profile=
所以我尝试添加配置文件如下所示(我看到人们是如何在 Java Selenium Binding 中创建的,所以我也做了同样的事情,但它在这里不起作用)
options = Selenium::WebDriver::Firefox::Options.new
options.add_argument('user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default')
@driver = Selenium::WebDriver.for :chrome, options: options
有人可以帮助我如何通过 Ruby Selenium 绑定(或 WATIR)创建 Chrome 配置文件吗?
我做了一个创建新浏览器的功能。你可以使用它。
def new_browser
if Rails.env.production?
chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
Selenium::WebDriver::Chrome.path = "/app/.apt/usr/bin/google-chrome"
Selenium::WebDriver::Chrome.driver_path = "/app/vendor/bundle/bin/chromedriver"
end
profile = Selenium::WebDriver::Chrome::Profile.new
profile['general.useragent.override'] = 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10'
driver = Selenium::WebDriver.for :chrome, :profile => profile
pid = driver.instance_variable_get(:@service).instance_variable_get(:@process).instance_variable_get(:@pid)
begin
browser = Watir::Browser.new driver
rescue => e
system("kill -9 #{@pid}")
end
return {:browser => browser , :pid => pid}
end
可以通过 Chromedrivers user-data-dir 参数使用现有配置文件或创建新配置文件。在 Watir 中,您可以通过 :args
参数传递参数:
browser = Watir::Browser.new :chrome,
args: ['user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data']
请注意,如果您尝试使用现有的默认配置文件,则不要在路径中包含 "Default" 目录。
由于您在评论中要求对水豚进行更详细的解释,我 post 将其作为答案(尽管您现在似乎已经有了一个可行的解决方案 - 抱歉延迟回答)。
在我的 rails 项目中,我通常按如下方式配置 Selenium chrome driver:
gem 'chromedriver-helper'
在 Gemfile 中(或在本地安装)。然后在 system-test 初始化器中定义
Capybara.register_driver :selenium_chrome_headless_no_sandbox do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.args << '--headless'
browser_options.args << '--disable-gpu'
browser_options.args << '--no-sandbox'
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
及以后(配置RSpec)我将其设置为使用过的driver,如:
RSpec.configure do |config|
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome_headless_no_sandbox
end
end
也许这对某人有帮助。干杯
编辑:添加了chromedriver-helper