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

¿Cómo tomar el screenshot de una WEB?

September 20th, 2009

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

Configuración, Linux, Programación , , , , ,

  1. No comments yet.
  1. No trackbacks yet.
 

You need to log in to vote

The blog owner requires users to be logged in to be able to vote for this post.

Alternatively, if you do not have an account yet you can create one here.

Powered by Vote It Up