无法使用 Watir 绕过 Firefox 的不安全证书警告
Unable to bypass insecure certificate warning with Firefox using Watir
在 Watir 6.2.0 中使用 Firefox 驱动程序时,我似乎无法忽略任何证书警告。这是意外行为,还是我没有正确使用 API?
示例代码:
require 'watir'
profile = Selenium::WebDriver::Firefox::Profile.new
profile.assume_untrusted_certificate_issuer = false
browser = Watir::Browser.new(:firefox, :profile => profile)
browser.goto 'https://self-signed.badssl.com/
意外结果:
/Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok': Selenium::WebDriver::Error::UnknownError
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/w3c_bridge.rb:620:in `execute'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/w3c_bridge.rb:126:in `get'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/common/navigation.rb:32:in `to'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/watir-6.2.0/lib/watir/browser.rb:78:in `goto'
from /Users/bshannon/Desktop/test.rb:8:in `<main>'
环境:
Watir 6.2.0
Selenium Webdriver 3.3.0
Geckodriver 0.15
Firefox 52.0
Mac OSX
试试这个:
profile.accept_untrusted_certificates = true
profile.assume_untrusted_certificate_issuer = true
您可以通过 desired capabilities. There's additional documentation at https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings#ssl-certificates 执行此操作。
require 'watir'
capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true)
browser = Watir::Browser.new(:firefox, :desired_capabilities => capabilities)
browser.goto 'https://self-signed.badssl.com/'
puts browser.url #=> https://self-signed.badssl.com/
browser.close
如果您正在使用 Chrome,那么您需要改为这样做:
Watir::Browser.new(:chrome, switches: ['--ignore-certificate-errors'])
最近(在 Watir 7.1 和 selenium webdriver 4.1.0 中)我能够通过在 Watir 选项中提供 accept_insecure_certs
来实现这一点:
profile = Selenium::WebDriver::Firefox::Profile.new
profile.proxy = Selenium::WebDriver::Proxy.new :http => 192.168.1.2, :ssl => 192.168.1.3
profile['network.http.max-connections'] = 15
options = {
accept_insecure_certs: true,
page_load_timeout: 60,
script_timeout: 60,
profile: profile,
args: ['-headless']
}
browser = Watir::Browser.new(:firefox, options: options)
在 Watir 6.2.0 中使用 Firefox 驱动程序时,我似乎无法忽略任何证书警告。这是意外行为,还是我没有正确使用 API?
示例代码:
require 'watir'
profile = Selenium::WebDriver::Firefox::Profile.new
profile.assume_untrusted_certificate_issuer = false
browser = Watir::Browser.new(:firefox, :profile => profile)
browser.goto 'https://self-signed.badssl.com/
意外结果:
/Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok': Selenium::WebDriver::Error::UnknownError
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/w3c_bridge.rb:620:in `execute'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/remote/w3c_bridge.rb:126:in `get'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/selenium-webdriver-3.3.0/lib/selenium/webdriver/common/navigation.rb:32:in `to'
from /Users/bshannon/.rvm/gems/ruby-2.4.0/gems/watir-6.2.0/lib/watir/browser.rb:78:in `goto'
from /Users/bshannon/Desktop/test.rb:8:in `<main>'
环境:
Watir 6.2.0
Selenium Webdriver 3.3.0
Geckodriver 0.15
Firefox 52.0
Mac OSX
试试这个:
profile.accept_untrusted_certificates = true
profile.assume_untrusted_certificate_issuer = true
您可以通过 desired capabilities. There's additional documentation at https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings#ssl-certificates 执行此操作。
require 'watir'
capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true)
browser = Watir::Browser.new(:firefox, :desired_capabilities => capabilities)
browser.goto 'https://self-signed.badssl.com/'
puts browser.url #=> https://self-signed.badssl.com/
browser.close
如果您正在使用 Chrome,那么您需要改为这样做:
Watir::Browser.new(:chrome, switches: ['--ignore-certificate-errors'])
最近(在 Watir 7.1 和 selenium webdriver 4.1.0 中)我能够通过在 Watir 选项中提供 accept_insecure_certs
来实现这一点:
profile = Selenium::WebDriver::Firefox::Profile.new
profile.proxy = Selenium::WebDriver::Proxy.new :http => 192.168.1.2, :ssl => 192.168.1.3
profile['network.http.max-connections'] = 15
options = {
accept_insecure_certs: true,
page_load_timeout: 60,
script_timeout: 60,
profile: profile,
args: ['-headless']
}
browser = Watir::Browser.new(:firefox, options: options)