¿Cómo tomar el screenshot de una WEB?
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
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
Luego convertimos la imagen capturada a otro formato, como PNG por ejemplo.
$ convert screen.xwd screen.png
Resultado Final:
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.



Recent Comments