【问题标题】:Save images from a website (with watir)从网站保存图像(使用 watir)
【发布时间】:2016-03-29 18:32:59
【问题描述】:

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

我:我不能使用的原因

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

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

二: 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

【问题讨论】:

  • 为什么browser.image.save(file) 没用?该方法打开保存对话框,输入所需字段并保存文件(即该对话框也是自动化的)。或者你的意思是它没有帮助,因为它只适用于 IE,你需要使用不同的浏览器?
  • 在我的情况下,它会打开保存对话框并等待。如手册中所述,仅当文件存在时才会发生,但情况并非如此(空目录和随机文件名)
  • 这很奇怪。将图像另存为新文件时没有遇到任何问题。
  • `c:\tmp` 目录是否存在?如果目录不存在,您的示例只会为我挂起。
  • 对这个问题的回答对您有帮助吗? stackoverflow.com/questions/16190826/…

标签: ruby watir watir-webdriver


【解决方案1】:

如果图像一旦显示就无法打开,则只有一种 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")

【讨论】:

  • 您可能会遇到与窗口大小相关的问题(尤其是在无头浏览器上),请参阅我的回答 here 以获得修复!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多