Używam modułu perla Gtk2::WebKit
, aby utworzyć przeglądarkę i zrobić zrzut ekranu ze strony internetowej. Nie ma problemu z zrobieniem zrzutu ekranu widocznej części strony (rozmiar okna). Jak jednak zrobić zrzut ekranu całej strony, nawet tej części, która nie jest widoczna w oknie?perl Gtk2 :: WebKit: jak zrobić zrzut ekranu na pełną stronę
Odpowiedz
Myślę, że this jest tym, czego szukasz. Znalazłem go na Githubie.
screenshot.pl - zrzut ekranu
zapisać stronę jako SVG:
screenshot.pl --type svg http://www.google.com/
zapisać stronę jako PDF:
screenshot.pl --output cpan.pdf http://search.cpan.org/
zapisać element strona pobrana z zapytania XPath jako PNG:
screenshot.pl --output ba.png --xpath 'id("content")' http://bratislava.pm.org/
Oto moja GTK2 rozwiązanie tego problemu:
#!/usr/bin/perl
use Gtk2 -init;
use Gtk2::WebKit;
use Data::Dumper;
my $window = Gtk2::Window->new;
my $sw = Gtk2::ScrolledWindow->new;
my $view = Gtk2::WebKit::WebView->new;
my $factor = 0;
$window->set_default_size(Gtk2::Gdk->screen_width, Gtk2::Gdk->screen_height);
$window->set_border_width(1);
$sw->add($view);
$window->add($sw);
$window ->signal_connect('destroy' => \&delete_event);
$view->signal_connect('load-finished' => \&prepare_zoom);
$view->set_full_content_zoom(TRUE);
$view->signal_connect('size-allocate' => \&screenshot);
$view->open('http://stackoverflow.com/questions');
$window->show_all;
Gtk2->main;
#####################################
sub delete_event {
Gtk2->main_quit;
return FALSE;
}
#####################################
sub prepare_zoom {
$adj = $sw->get_vadjustment();
$factor = $adj->page_size/$adj->upper;
$view->set_zoom_level($factor);
}
sub screenshot {
return unless defined($window->window) && $factor>0;
my ($width, $height) = $window->window->get_size;
my $sWidth=$width*$factor;
my $gdkpixbuf = Gtk2::Gdk::Pixbuf->new ('rgb', 0, 8, $width, $height);
$gdkpixbuf->get_from_drawable($window->window,
undef, 0, 0, 0, 0, $width, $height);
$gdkpixbuf->save ("screenshot.jpg", 'jpeg', quality => 100);
#Gtk2->main_quit;
return FALSE;
}
Ten kod działa, ale nie jestem GTK2/Webkit ekspertem, więc jestem pewien, że to może być napisany w sposób lepszy sposób.
Ideą tego jest prosty:
- załadować stronę
- Pobierz pełny rozmiar strony i widoczny rozmiar strony, a następnie obliczyć współczynnik skali, aby zobaczyć pełną zawartość strony
- dopasowuje strony wykorzystujące ten współczynnik skali
- chwycić screenshot
UWAGI
- Zależy gdzie chcesz go zastosować, obliczenie współczynnika skalowania mogą wymagać pewnych korekt
- Można przyciąć zrzut ekranu (aby usunąć puste obszary) doprowadzenie wartości przekazywane do get_from_drawable.
Sprytna sztuczka, ale nie mogę jej użyć, ponieważ potrzebuję obrazu w oryginalnym rozmiarze. – Julien
Możesz użyć xvfb (http://en.wikipedia.org/wiki/Xvfb), aby to zrobić. Zasadniczo obliczyć wymiary docelowej sieci, wywołać xvfb z takimi wymiarami i załadować stronę w nim. –
- 1. jak zrobić zrzut ekranu?
- 2. Jak zrobić zrzut ekranu z części UIView?
- 3. C#: jak zrobić zrzut części ekranu
- 4. Jak zrobić zrzut ekranu pod Waylandem?
- 5. Jak zrobić zrzut ekranu z pełną witryną za pomocą C# i WebKit.NET?
- 6. Jak programować zrzut ekranu?
- 7. Jak zrobić zrzut ekranu części serwisu Google Maps? JavaScript
- 8. Jak zrobić zrzut ekranu całej strony w Kątomierzu?
- 9. jak programowo zrobić zrzut ekranu i zapisać go w galerii?
- 10. Jak programowo zrobić zrzut ekranu iPhone/iPad z Xamarin.iOS (C#)?
- 11. Jak zrobić zrzut ekranu pojedynczego elementu HTML w rozszerzeniu Chrome?
- 12. Jak zrobić wybór obszaru ekranu, rysując na pulpicie, aby wykonać zrzut ekranu?
- 13. Jak pobrać pełną stronę internetową?
- 14. Zrzut ekranu w Haskell?
- 15. Opóźnienie zrzut ekranu iOS
- 16. Czy można zrobić zrzut ekranu widoku bez wyświetlania widoku?
- 17. Android wykonuje zrzut ekranu
- 18. Zyskaj zrzut ekranu na Windowsie z Pythonem?
- 19. Brakujący zrzut ekranu aplikacji na iOS
- 20. Jak zrobić wyskakujące okienko na środku ekranu?
- 21. Zrzut ekranu pokazuje czarny
- 22. Jak wykonać zrzut ekranu renderowanej strony HTML?
- 23. Zrzut ekranu okna z pytonem:
- 24. Jak zrobić zrzut ekranu z klipu wideo 50 minut w klipie i zrobić to szybko?
- 25. Selenium pobierz pełną stronę html
- 26. Zrzut ekranu ignoruje niektóre okna
- 27. Zrzut ekranu z animacją rdzenia na iPadzie
- 28. Jak pozycjonować stronę internetową na środku ekranu?
- 29. Zapisz pełny zrzut ekranu włączając sztaby
- 30. Uzyskaj zrzut ekranu kontrolki przeglądarki?
używa GTK3, a nie GTk2. Nie mogę zainstalować Gtk3 na CentOS 6.5 – Julien
Dlaczego nie na 6.5? Sprawdź to: http://linuxfonts.narod.ru/compiling-and-installing-gtk3-in-centos6.html –