运维开发网

ruby – 使用Capybara或类似功能访问所有已加载的资源

运维开发网 https://www.qedev.com 2020-07-05 15:47 出处:网络 作者:运维开发网整理
我正在寻找一种可能性,可以轻松访问并列出网页文档开始加载后加载的所有资源:脚本,图像,样式表等,使用无头浏览器.我对文件的网址,状态代码和类型等感兴趣. 想象一种以编程方式访问“网络”选项卡(开发人员工具)为您提供的信息的方法: 有没有人知道一个Ruby库来帮助我这个或者 – 甚至更好 – 如果有办法用Capybara(-webkit)实现这个目的? 更新 似乎Poltergeist has a
我正在寻找一种可能性,可以轻松访问并列出网页文档开始加载后加载的所有资源:脚本,图像,样式表等,使用无头浏览器.我对文件的网址,状态代码和类型等感兴趣.

想象一种以编程方式访问“网络”选项卡(开发人员工具)为您提供的信息的方法:

有没有人知道一个Ruby库来帮助我这个或者 – 甚至更好 – 如果有办法用Capybara(-webkit)实现这个目的?

更新

似乎Poltergeist has a method called network_traffic就是我所追求的.但是,还没有时间研究它.我会做一次报告.

正如更新中所提到的,似乎有一种方法可以通过Poltergeist(一个Capybara驱动程序)来做到这一点.这是一个快速且非常“hackish”的实验:

require 'rubygems'
require 'capybara'
require 'capybara/poltergeist'

driver = Capybara::Poltergeist::Driver.new({})
port   = Capybara::Poltergeist::Util.find_available_port
server = Capybara::Poltergeist::Server.new(port, 30)
client = Capybara::Poltergeist::Client.start(port,
  :path              => driver.options[:phantomjs],
  :window_size       => driver.options[:window_size],
  :phantomjs_options => driver.phantomjs_options
)

browser = Capybara::Poltergeist::Browser.new(server, client, nil)
browser.visit('http://www.google.com/')

browser.network_traffic.each do |request|
  # sorry, quick and dirty to see what we get:
  request.response_parts.uniq(&:url).each do |response|
    puts "#{response.url}: #{response.status}"
  end
end

=> 

http://www.google.com/: 200
http://ssl.gstatic.com/gb/images/b_8d5afc09.png: 200
http://www.google.com/images/srpr/logo1w.png: 200
http://www.google.com/images/srpr/nav_logo80.png: 200
http://www.google.com/xjs/_/js/hp/sb_he,pcc/rt=j/ver=FaiMBboaDLc.en_US./d=1/sv=1/rs=AItRSTMKxoHomLOW7ITf6OnfIEr5jQCEtA: 200

然而,这非常缓慢,当然远非任何可用的.我打算更深入地挖掘Poltergeist,以便在较低的层次上做同样的事情.

0

精彩评论

暂无评论...
验证码 换一张
取 消