使用无头 Chrome 将 URL 列入黑名单

the*_*lus 7 ruby testing rspec capybara webmock

我试图阻止我的规范中的 URL,实现了我在使用时所做的事情capybara_webkit

Capybara::Webkit.configure do |config|
  config.block_url("*google*")
  config.allow_url('*my_website.com')
end
Run Code Online (Sandbox Code Playgroud)

阅读本文后,我尝试执行以下操作:

require 'webmock/rspec'

module WebmockConfig
  def self.default_disabled_urls
    [
      '*google*'
    ]
  end
end

WebMock.disable_net_connect!(allow_localhost: true)
WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)
Run Code Online (Sandbox Code Playgroud)

但我得到

禁用真正的 HTTP 连接。未注册的请求:POST http://127.0.0.1/session

即使那应该由WebMock.disable_net_connect!(allow_localhost: true).

在没有 的情况下运行规范时WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls),一切正常。

Tho*_*ole 5

白名单capybara-webkit/黑名单会影响浏览器发出的请求,而 WebMock 只能影响您的应用程序发出的请求。这意味着WebMock对于你想要的东西来说是无用的,因为它实际上不会阻止你的浏览器加载来自谷歌等的任何内容。要在使用 selenium 驱动程序时做到这一点,你需要使用像puffing-billy这样的可编程代理,它允许你自定义对浏览器发出的任何匹配请求的响应。

要使用 headless chrome 和 puffing_billy 配置驱动程序,您可以执行类似的操作

Capybara.register_driver :headless_chrome do |app|
 browser_options = ::Selenium::WebDriver::Chrome::Options.new
 browser_options.headless!
 browser_options.add_argument("--proxy-server=#{Billy.proxy.host}:#{Billy.proxy.port}")
 Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
Run Code Online (Sandbox Code Playgroud)

您是否需要任何其他选项取决于您的系统配置等,但您应该能够通过查看当前的驱动程序注册来判断。