使用watir-webdriver保存图像

时间:2013-09-13 10:40:33

标签: ruby watir watir-webdriver

我怎么能保存通过watir-webdriver加载的图像?所有手册和示例仅显示获取图像的src,并使用open-uri保存它。但是我需要保存在我的页面加载时生成的图像。我怎样才能做到这一点?

我可以同时使用watir和watir-webdriver吗?例如:

require 'watir-webdriver'
require 'watir'
@driver = Watir::Browser.new :firefox
@driver.goto (@base_url)
@img = @driver.image(id: 'CaptchaImage').save("2131.png")

我该怎么做这样的事情?或者如何从缓存中获取它?

有人可以帮我吗?

4 个答案:

答案 0 :(得分:1)

OpenURI会帮助你..

require "watir-webdriver"
require "open-uri"

b = Watir::Browser.new :chrome
b.goto "http://stackoverflow.com/"

File.open("target_file.jpg", 'wb') do |f|
 f.write open(b.img(:class, "sponsor-tag-img").src).read
end

希望你做得不好......:)

如果有帮助,请告诉我。

答案 1 :(得分:1)

require 'watir-webdriver'

如果您经常这样做,可以使用以下内容扩展Watir的Image类:

Watir::Image.class_eval do

    def save path_to_new_file
          #so that src can be opened without raising: 
          #Errno::ENOENT: No such file or directory @ rb_sysopen
        require 'open-uri' 

        open(path_to_new_file, 'wb') do |file|
          file << open(src).read
        end
    end

end

所以可以按如下方式使用:

browser = Watir::Browser.start 'google.com'
image = browser.img
image.save 'our_images/hi.png'

答案 2 :(得分:0)

根据watir-webdriver文档,没有Image#save方法,因为它尚未实现。

另一方面,watir-classic确实有Image#save方法。这是rdoc的例子:

browser.image.save("c:/foo/bar.jpg")

答案 3 :(得分:0)

事实证明,这比应做的要难,但是我需要完成此操作,因为只有在设置了有效的会话cookie时才能访问图像。这就是我最终设法完成此操作的方式:

1。安装watir-extensions-element-screenshot

https://github.com/ansoni/watir-extensions-element-screenshot
您可能想做gem install watir-extensions-element-screenshot

2。调整浏览器窗口的大小

这也适用于无头phantomJS。初始化浏览器后,请将窗口大小设置为较大,以防止图像大于浏览器窗口时发生错误。

browser = Watir::Browser.new :phantomjs
browser.window.resize_to(1900, 1080)

3。获取图像元素并对其进行截图

就我而言,整个网站都是一张图片。幸运的是,browser.html确实表明该图像仍封装在<img>标签中,因此我们可以像这样访问图像(在此示例中,页面上的所有图像):

browser.elements( :tag_name => "img" ).each do |x|
    x.screenshot("file_name.png")
end

这会将图像保存到file_name.png。它不是完全相同的文件,而是它的屏幕快照。但是就图像下载而言,这对我来说是一个完美的解决方案,希望对其他人也是如此!