Home > Configuración, Linux, Programación > ¿Cómo tomar el screenshot de una WEB?

¿Cómo tomar el screenshot de una WEB?

September 20th, 2009 Leave a comment Go to comments

Introducción

En este post veremos como tomar un screenshot de una página web utilizando la linea de comandos de Linux.
Los requerimientos necesarios son:

  • Sistema operativo Linux
  • Framebuffer Virtual del Servidor X (Xvfb)
  • Navegador Firefox
  • ImageMagick

Xvfb

En el Sistema Windows X, Xvfb es un servidor X11 que realiza todas las operaciones gráficas en memoria sin necesidad de utilizar una pantalla. Con esta herramienta vamos a crear una especie de pantalla virtual para iniciar Firefox en ella y luego tomar el screenshot.

En la siguiente imagen se muestra como installar Xvfb

Instalando Xvfb

Instalando Xvfb

Una vez instalado, procedemos a editar el siguiente archivo /etc/dbus-1/system.d/xorg-server.conf para poder arrancar nuesta pantalla virtual

El contenido actual es:

<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
 <policy context="default">
 <allow own="org.x.config.display0"/>
 <allow send_destination="org.x.config.display0"/>
 <allow send_interface="org.x.config.display0"/>
 <allow own="org.x.config.display1"/>
 <allow send_destination="org.x.config.display1"/>
 <allow send_interface="org.x.config.display1"/>
 </policy>
</busconfig>

Agregamos la pantalla numero 2:

<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
 <policy context="default">
 <allow own="org.x.config.display0"/>
 <allow send_destination="org.x.config.display0"/>
 <allow send_interface="org.x.config.display0"/>
 <allow own="org.x.config.display1"/>
 <allow send_destination="org.x.config.display1"/>
 <allow send_interface="org.x.config.display1"/>
 <allow own="org.x.config.display2"/>
 <allow send_destination="org.x.config.display2"/>
 <allow send_interface="org.x.config.display2"/>
 </policy>
</busconfig>

Ahora el siguiente paso es iniciar nuestra pantalla virtual, ejecutamos el siguiente commando:

$ Xvfb :2 -ac -screen :0 1024x768x24 2>&1 > /dev/null &

Esto nos debe iniciar nuestro servicio de Xvfb, para verificar que se esta ejecutando ejecutamos el siguiente comando:

$ ps auxx | grep Xvfb

Firefox

El siguiente paso ahora es iniciar Firefox en nuestra pantalla virtual y como parametro le pasamos la URL que debe cargar

$ firefox --display=:2 http://www.google.com -silent -nosplash -fullscreen 2>&1 > /dev/null &

Verificamos si en efecto se creo el proceso:

$ ps auxx | grep firefox

Luego procedemos a tomar el screenshot con el siguiente comando:

$ xwd -root -out -display :2 screen.xwd

ImageMagick

ImageMagick es una herramienta para manipular imagenes mediante linea de comandos.

Procedemos a installar ImageMagick

Instalando ImageMagick

Instalando ImageMagick

Luego convertimos la imagen capturada a otro formato, como PNG por ejemplo.

$ convert screen.xwd screen.png

Resultado Final:

Resultado del Screenshot

Resultado del Screenshot

Para finalizar, hay que cerrar los procesos de firefox y Xvfb

$ kill `pidof firefox`

$ kill `pidof Xvfb`

Script Completo

A continuación un pequeño script con el código para tomar el screenshot, como parámetro se le pasa la URL:

DISPLAY_NUMBER=:2
Xvfb $DISPLAY_NUMBER -ac -screen :0 1024x768x24 2>&1 > /dev/null &
sleep 10
firefox --display=$DISPLAY_NUMBER $1 -silent -nosplash -fullscreen 2>&1 > /dev/null &
sleep 10
xwd -root -out -display $DISPLAY_NUMBER screen.xwd
convert screen.xwd screen.png
rm screen.xwd
kill `pidof firefox`
kill `pidof Xvbf`
echo "[DONE]"

Para ejecutarlo:

$ ./take-screenshot http://www.google.com

Notas Finales

Como firefox se esta ejecutando en una pantalla virtual y no lo estamos cerrando de forma correcta (matando el proceso), es necesario eliminar el archivo que pide la restauracion de firefox.

$ rm /home/{USER_HOME}/.mozilla/firefox/{PROFILE_NAME}.default/sessionstore.js

Donde {USER_HOME} es el usuario donde se esta ejecutando firefox y {PROFILE_NAME} es el nombre del profile que se creo cuando se ejecuto firefox.

Términos de búsqueda
Compartir:

  • email
  • Twitter
  • Digg
  • del.icio.us
  • MySpace
  • Facebook
  • Mixx
  • Google Bookmarks
  • Technorati
  • Live
  • Meneame
  • Yahoo! Bookmarks
  • LinkedIn
  • StumbleUpon
  1. No comments yet.
  1. No trackbacks yet.