如何使用 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 <解决问题/ EM>
答案 0 :(得分:0)
您可能需要考虑在Watir控制的浏览器上禁用图像。然后,您可以在源中找到URL,并使用您的代码首次获取图像。净效应应与您尝试的相同。
答案 1 :(得分:0)
如果一旦显示图像就无法打开图像,那么只有一种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")
答案 2 :(得分:-2)
我不在窗户上,因此无法尝试'watir-way',但你可以通过召唤卷曲或wget来做到这一点:
browser.images.each do |img|
%x| curl #{img.src} -O #{img.src.split('/').last} |
end