2013-05-06 18 views
6

Jak mogę zapisać obrazy witryny za pomocą watir, bez ponownego ładowania ich za pomocą open-uri lub podobnego?Zapisywanie obrazów z witryny internetowej (z watir)

I: Powód, dla którego nie mogę używać

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

to, że obrazy są generowane w bieżącej sesji (login-) i tylko raz, więc „zewnętrznym” 2nd dostęp nie jest możliwy .

II: browser.images.save() - tylko dla ie - nie jest pomocne, otwiera okno dialogowe zapisywania. Jest więc tak bezużyteczny dla automatyzacji.

Przykłady: 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 

źródłowe 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 

Mój najlepszy pomysł atm jest, aby pobrać wszystkie obrazy za pomocą pełnomocnika. Ale może jest "watir-way".

Środowisko:

# 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) 

Edit: Zdaję sobie sprawę, że istnieją różne sposoby, aby uzyskać obrazy ze strony internetowej, bez wypadku myślenia mogę zbudować listę Mając tak wiele rozwiązań, ale jego zamiar rozwiązać problem z watir.

+0

Dlaczego 'browser.image.save (plik)' jest bezużyteczne? Metoda otwiera dialog zapisu, wprowadza wymagane pola i zapisuje plik (np. Dialog jest również zautomatyzowany). Czy masz na myśli, że nie jest to pomocne, ponieważ jest tylko dla IE i musisz użyć innej przeglądarki? –

+0

W moim przypadku otwiera okno dialogowe zapisu i czeka. Jak opisano w instrukcji, co powinno się zdarzyć tylko wtedy, gdy plik istnieje, ale tak nie jest (pusty katalog i nazwa pliku losowego) – inselberg

+0

To jest dziwne. Nie napotkam żadnych problemów z zapisaniem obrazu jako nowego pliku. –

Odpowiedz

-2

Nie jestem na Windows, więc nie spróbować „Watir drogi”, ale można to zrobić po prostu woła do zwijania lub wget:

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

Być może warto rozważyć wyłączenie obrazów w przeglądarce kontrolowanej przez Watira. Następnie możesz znaleźć adresy URL w źródle i pobrać obrazy po raz pierwszy za pomocą kodu. Efekt netto powinien być taki sam, jak to, co próbujesz zrobić.

0

Jeśli nie można otworzyć obrazu po jego wyświetleniu, istnieje tylko jedna droga Watira. Możesz zrobić zrzut ekranu swojego obrazu za pomocą Element screenshot extension. Będzie to wyglądać następująco:

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") 
Powiązane problemy