0

我如何保存通过 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

4 回答 4

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

希望你没有做坏事.. :)

请让我知道它是否有帮助。

于 2013-09-23T10:05:14.537 回答
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'
于 2015-10-26T23:19:23.387 回答
0

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

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

browser.image.save("c:/foo/bar.jpg")
于 2013-09-13T21:44:10.617 回答
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. 这不是完全相同的文件,而是它的屏幕截图。但就图像下载而言,这对我来说是一个完美的解决方案,希望对其他人也是如此!

于 2019-11-18T07:22:04.353 回答