我怎么能保存通过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")
我该怎么做这样的事情?或者如何从缓存中获取它?
有人可以帮我吗?
答案 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
。它不是完全相同的文件,而是它的屏幕快照。但是就图像下载而言,这对我来说是一个完美的解决方案,希望对其他人也是如此!