无头Chrome黑名单URL



我试图在我的规范中屏蔽URL,实现了与使用capybara_webkit:时类似的功能

Capybara::Webkit.configure do |config|
config.block_url("*google*")
config.allow_url('*my_website.com')
end

看完这篇文章后,我试着做一些类似的事情:

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)

但我得到

实际HTTP连接被禁用。未注册的请求:POSThttp://127.0.0.1/session

即使这应该由WebMock.disable_net_connect!(allow_localhost: true)解决。

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

capybara-webkit白/黑名单会影响浏览器发出的请求,而WebMock只能影响应用程序发出的请求。这意味着WebMock对你想要的东西毫无用处,因为它实际上不会阻止你的浏览器从谷歌等加载任何东西。要在使用硒驱动程序时做到这一点,你需要使用一个可编程的代理程序,比如puffing-billy,它可以让你自定义浏览器发出的任何匹配请求的响应。

要使用无头chrome和蓬松的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

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

allow_localhost: true设置被allow: WebmockConfig.default_disabled_urls覆盖,您必须用两个设置调用WebMock.disable_net_connect!一次,或者通过将'localhost', '127.0.0.1'条目添加到self.default_disabled_urls

最新更新