#!perl -w use strict; use WWW::Mechanize::Firefox; use Getopt::Long; use Pod::Usage; GetOptions( 'mozrepl|m:s' => \my $mozrepl, 'outfile|o:s' => \my $outfile, 'tab|t:s' => \my $tab, 'target-width|tw:s' => \my $target_w, 'target-height|th:s' => \my $target_h, 'target-scale|s:s' => \my $target_scale, 'target-scale-x|sx:s' => \my $target_scale_w, 'target-scale-y|sy:s' => \my $target_scale_h, 'current|c' => \my $current, ) or pod2usage(); $outfile ||= 'screenshot.png'; my @args; if (! @ARGV) { push @args, tab => 'current'; }; if ($tab) { $tab = qr/$tab/; } elsif ($current) { $tab = $current }; my $mech = WWW::Mechanize::Firefox->new( launch => 'firefox', create => 1, tab => $tab, autoclose => (!$tab), @args ); if (@ARGV) { $mech->get($ARGV[0]); }; my $png = $mech->content_as_png(undef,undef, { width => $target_w, height => $target_h, scalex => ($target_scale_w||$target_scale), scaley => ($target_scale_h||$target_scale), } ); open my $out, '>', $outfile or die "Couldn't create '$outfile': $!"; binmode $out; print {$out} $png; =head1 NAME screenshot.pl - take a screenshot of a webpage =head1 SYNOPSIS screenshot.pl [options] [url] Options: --outfile name of output file --mozrepl connection string to Firefox --tab name of the tab title to use --current use currently active tab --target-width width of target image (in pixels) --target-height height of target image (in pixels) --target-scale scale of target image (ratio) =head1 OPTIONS =over 4 =item B<--outfile> Name of the output file. The image will always be written in PNG format. =item B<--mozrepl> Connection information for the mozrepl instance to use. =back =head1 DESCRIPTION B will take a screenshot of the given URL (including plugins) and write it to the given file or the file C. =cut