2013-05-06 9 views
6

watirでウェブサイトの画像を保存するには、open-uriなどでリロードする必要はありませんか?ウェブサイトから画像を保存する(ワイア)

I:私は

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

を使用することはできません理由は画像が現在の(login-)セッション中に生成され、一度だけなので、「外部」第2回のアクセスが不可能であるということです。

II: browser.images.save() - これは、どちらも役に立ちません。セーブ先のダイアログが開きます。したがって、オートメーションにとっては無駄です。

例: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の問題。

+0

なぜ 'browser.image.save(file)'は役に立たないのですか?このメソッドは保存ダイアログを開き、必要なフィールドを入力してファイルを保存します(つまりダイアログも自動化されます)。それとも、IEのためだけで、別のブラウザを使用する必要があるので、役立たないということですか? –

+0

私の場合は、保存ダイアログを開き、待ちます。マニュアルに記載されているように、ファイルが存在する場合にのみ発生するはずですが、そうではありません(空のディレクトリとランダムファイル名) – inselberg

+0

これは奇妙です。私は画像を新しいファイルとして保存することに問題はありません。 –

答えて

-2

私は、Windows上で「ワチールウェイ」を試してそうできないんだけど、あなたは、単にカールやwgetのために呼び出すことによってこれを行うことができます:

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

あなたが画像を無効にすることを検討する必要がありますブラウザ上ではWatirによって制御されます。次に、ソース内のURLを検索し、コードを使用して初めて画像を取得できます。正味の効果は、あなたがしようとしているものと同じでなければなりません。

0

画像が一度表示されたら、それを開くことができない場合は、Watirの方法は1つだけです。 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") 
関連する問題