从网站保存图像(使用watir)

时间:2013-05-06 00:45:00

标签: ruby watir watir-webdriver

如何使用 watir 保存网站图片,而无需使用open-uri或类似版本重新加载?

我:我不能使用

的原因
      File.open(file_name, 'wb') do |f|
             f.write open(img.src).read
      end # file open

是图像是在当前(登录)会话中生成的,只有一次,因此无法进行“外部”第二次访问。

II: browser.images.save() - 仅用于ie - 也没有帮助,它会打开保存对话框。所以它对自动化没用。

示例:http://wiki.openqa.org/display/WTR/Save+All+Images+on+a+Webpage

 require 'watir'
 browser = Watir::Browser.new :ie
 browser.goto 'http://google.com'

 idx = 0
 browser.images.each do |x|
   puts idx
   idx += 1
   location = 'c:\tmp\file-' + idx.to_s + '.jpg'
   x.save(location)
 end

github来源:http://rubydoc.info/github/watir/watir-classic/Watir/Image

    # File 'lib/watir-classic/image.rb', line 48

    def save(path)
    @container.goto(src)
     begin
      fill_save_image_dialog(path)
      @container.document.execCommand("SaveAs")
     ensure
      @container.back
     end
    end

我最好的主意是使用代理获取所有图像。但也许有一种“轮流”。

环境:

 # ruby 1.9.3p125 (2012-02-16) [i386-mingw32]
 # watir (4.0.2 x86-mingw32)
 # watir-classic (3.6.0, 3.5.0, 3.4.0)
 # watir-webdriver (0.6.4, 0.6.2)

编辑:我知道有不同的方式从网站获取图像,没有事件思考我可以建立一个包含这么多解决方案的列表,但它即将用 watir <解决问题/ EM>

3 个答案:

答案 0 :(得分:0)

您可能需要考虑在Watir控制的浏览器上禁用图像。然后,您可以在源中找到URL,并使用您的代码首次获取图像。净效应应与您尝试的相同。

答案 1 :(得分:0)

如果一旦显示图像就无法打开图像,那么只有一种Watir方式。您可以使用Element screenshot extension截取图片的屏幕截图。它会像:

require 'watir-webdriver'
require 'watir/extensions/element/screenshot'

b = Watir::Browser.new
b.goto "http://your_page.com"
b.element(:id => "your_img").screenshot("Your_img.png")

答案 2 :(得分:-2)

我不在窗户上,因此无法尝试'watir-way',但你可以通过召唤卷曲或wget来做到这一点:

browser.images.each do |img|
  %x| curl #{img.src} -O #{img.src.split('/').last} |
end