7

如何使用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的问题。

4

3 回答 3

2

如果图像一旦显示就无法打开,则只有一种 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")
于 2016-03-29T10:22:49.677 回答
0

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

于 2013-09-30T02:16:24.127 回答
-2

我不在 Windows 上,因此无法尝试“watir-way”,但您只需调用 curl 或 wget 即可:

browser.images.each do |img|
  %x| curl #{img.src} -O #{img.src.split('/').last} |
end
于 2013-09-17T18:49:09.067 回答