使用ruby&获取图像文件水豚

时间:2012-11-03 07:55:51

标签: ruby selenium webkit capybara capybara-webkit

这是capybara通过HTTPS协议访问的页面上的图像标记:

<img src="path">

使用任何类型的驱动程序使用capybara从页面获取图像文件是否有任何方法?

我不能使用像File.read这样的东西(&#39;路径&#39;)因为图像也只能通过HTTPS访问。我的最新研究为我带来了这样的解决方案:

  1. 访问页面
  2. 将页面保存到png(webkit驱动程序具有这样的实用功能)
  3. 裁剪图片
  4. 但我确实相信存在漂亮的解决方案。

    已编辑1:

    我已经尝试过padde的解决方案,但这里是响应机构:

    <html><head><title>Object moved</title></head> 
        <body>
            <h2>Object moved to <a href=\"/Bledy/Blad404.aspx?aspxerrorpath=/CaptchaType.ashx\">here</a>.</h2> 
        </body>
    </html>
    

    已编辑2:

    > curl -I image_path
    
    5860cf30abf5d5480
    HTTP/1.1 302 Found
    Cache-Control: private
    Content-Length: 168
    Content-Type: text/html; charset=utf-8
    Location: /Bledy/Blad404.aspx?aspxerrorpath=/CaptchaType.ashx
    Server: Microsoft-IIS/7.5
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    Date: Sat, 03 Nov 2012 17:18:55 GMT
    

1 个答案:

答案 0 :(得分:2)

如果我做对了,你可能想要的是来自Ruby的HTTPS请求。尝试:

require 'net/https'

url = URI.parse('path')

Net::HTTP.start(url.host, url.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
  res = http.get(url.request_uri)
  open("image.png", "wb") do |f|
    f.write(res.body)
  end
end

对于裁剪,您可以使用chunky_png(纯Ruby)或rmagick(需要ImageMagick)

修改:如果您想关注重定向,可以执行

require 'net/https'

def process_image( content )
  # do your cropping here

  open("image.png", "wb") do |f|
    f.write(content)
  end
end

def fetch( url )
  Net::HTTP.start(url.host, url.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
    response = http.get(url.request_uri)
    case response.code
    when Net::HTTPRedirection
      fetch response['location']
    else
      process_image response.body
    end
  end
end

fetch URI.parse('path')