我正在使用perl模块Gtk2::WebKit
来创建浏览器并截取网页的屏幕截图。截取页面可见部分的屏幕截图(窗口大小)没有问题。但是,如何拍摄整页的屏幕截图,甚至是窗口中不可见的部分?
答案 0 :(得分:3)
我认为this正是您所寻找的。我在Github上找到了它。
screenshot.pl - 截图
将页面另存为SVG:
screenshot.pl --type svg http://www.google.com/
将页面另存为PDF:
screenshot.pl --output cpan.pdf http://search.cpan.org/
将从XPath查询中获取的页面元素另存为PNG:
screenshot.pl --output ba.png --xpath 'id("content")' http://bratislava.pm.org/
答案 1 :(得分:1)
以下是此问题的 GTK2 解决方案:
#!/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;
}
此代码有效,但我不是 GTK2 / Webkit 专家,所以我确信它可以用更好的方式编写。
背后的想法很简单:
备注强>