2010-02-22 5 views
17

¿Es posible escribir un script en Perl que abra diferentes URL y guarde una captura de pantalla de cada uno de ellos?¿Cómo puedo tomar capturas de pantalla de páginas web con Perl?

+0

Eso sería difícil, Perl no puede renderizar una página web para guardar una captura de pantalla. –

+0

Python o cualquier otro lenguaje de scripting? – fixxxer

+10

@Murali: Eso no significa que no puedas usar Perl. Ver mi publicación a continuación. – Zaid

Respuesta

24

Puede usar WWW::Mechanize::Firefox para controlar una instancia de Firefox y volcar la página representada con $mech->content_as_png.

Sin embargo, ten en cuenta que configurarlo puede ser todo un desafío.

Si todo funciona como se espera, puede simplemente usar un script como este para volcar imágenes de los sitios web deseados, pero debe iniciar Firefox y cambiar su tamaño manualmente al ancho deseado (la altura no importa, WWW :: Mechanize :: Firefox siempre volca toda la página).

use WWW::Mechanize::Firefox; 
use Path::Class qw/file/; 

my $mech = WWW::Mechanize::Firefox->new(
    bufsize => 10_000_000, # PNGs might become huge 
); 
$mech->get('http://www.stackoverflow.com/'); 

my $fh = file('test.png')->open('> :raw'); 
print $fh $mech->content_as_png();</code></pre> 
+0

Escribí sobre este módulo para PerlTricks: [Controlando Firefox desde Perl] (http: // perltricks.com/article/138/2014/12/8/Controlling-Firefox-from-Perl) –

4

También es posible usar Win32::IE::Mechanize para representar la página web utilizando Internet Explorer, y luego Win32::Screenshot para capturar la página. Probablemente tengas que trabajar un poco para averiguar dónde tomar la captura de pantalla, pero eso no debería ser demasiado difícil.

Esta será una solución de plataforma de Windows, por supuesto, pero puede ser suficiente.

+0

Parece que Win32 :: IE :: Mechanize ya no funciona con Activestate y/o Windows 7: https: //rt.cpan. org/Public/Dist/Display.html? Name = Win32-IE-Mechanize pero parece que todavía funciona http://search.cpan.org/dist/Win32-IEAutomation-0.5/lib/Win32/IEAutomation.pm –

9

Utilice el módulo WWW::Selenium, para lo cual deberá tener una sesión Selenium Remote Control en funcionamiento.

El método capture_entire_page_screenshot() debe ponerlo en funcionamiento.

De WWW::Selenium en CPAN:

$sel->capture_entire_page_screenshot($filename, $kwargs)

países de todo el contenido de la ventana de la lona actual en un archivo PNG ...


Un guión típico:

use strict; 
use warnings; 
use WWW::Selenium; 

my $sel = WWW::Selenium->new(host => "localhost", 
           port => 4444, 
           browser => "*iexplore", 
           browser_url => "http://www.google.com", 
          ); 

$sel->start; 
$sel->open("http://www.google.com"); 
$sel->capture_entire_page_screenshot("screenshot.png"); 
$sel->close; 
8

Otro enfoque, que no requiere el uso de un navegador, es usar ImageMagick y HTML2PS para convertir la imagen. Tenga cuidado, sin embargo, esto no es trivial, y es casi imposible (la última vez que lo intenté) hacer que funcione correctamente en Windows.

Una vez instalado ImageMagick, el enfoque más simple es ejecutar una llamada al sistema convert que se instala ImageMagick. Si desea un enfoque menos hackish, puede usar la API PerlMagickImageMagick.

Hay una excelente discusión sobre este enfoque que puede encontrar en PerlMonks.

Cuestiones relacionadas