En este post explicaré cómo tomar una captura de pantalla de cualquier página web con Node.JS. Es decir, tomar un screenshot de un sitio de internet como si lo visitáramos, pero sin realmente visitarlo.

Vamos a obtener la página web como una imagen usando JavaScript del lado del servidor. Para esto vamos a usar Node JS, PhantomJS y un módulo llamado node-webshot.

Código para guardar página web como imagen usando Node JS

Código para guardar página web como imagen usando Node JS

Lo que alcanzaremos al final será guardar una página web como una imagen PNG. También veremos algunas opciones que el paquete ofrece.

Requisitos y recomendaciones

Instala Node y NPM o actualiza NPM.

Instalar librería

En caso de que todavía no tengas un proyecto iniciado, ejecuta:

npm init -y

Para instalar el paquete ejecuta:

npm install --save node-webshot

Eso instalará las dependencias y paquetes necesarios, entre ellos PhantomJS que será un ejecutable. En mi caso se ve así:

Instalar node-webshot para tomar screenshot de página web

Instalar node-webshot para tomar screenshot de página web

Ejemplo de uso de node-webshot

Requerimos el paquete con:

require("webshot")

Después de eso ya podemos tomar una captura de una página web y guardarla en el disco duro. Veamos un ejemplo en donde guardamos la página de Facebook como una imagen PNG:

La forma más básica de esto es llamar a la función webshot que toma 4 argumentos:

  1. URL de la página web o sitio
  2. Ruta del archivo en donde se escribirá la imagen
  3. Un objeto con opciones para controlar mejor la captura
  4. Una función que será llamada al finalizar, a la que probablemente se le pase un error en caso de que exista

Una cosa importante es la lista de opciones. En ella especificamos cómo será la captura. Con la opción de screenSize indicamos el tamaño de la pantalla; si quisiéramos, podríamos ver un sitio como se vería en un iPhone, en una tableta o cualquier lugar cambiando los pixeles.

Por otro lado, shotSize se refiere al tamaño de la captura que se toma. En este caso ambas opciones están en all para que tome una captura del sitio completo, es decir, como si hiciera scroll por todo el contenido.

Dos trucos que apliqué son el userAgent para mentir o indicar que somos Chrome (podríamos indicar que somos otro navegador) y la opción del encabezado del lenguaje para ver las páginas en español en caso de que se pueda.

Lo del encabezado de idioma ya lo habíamos visto con la API de DuckDukGo.

Conclusiones

Esta librería de node-webshot funciona para muchísimas páginas. La única razón de que falle sería el bloqueo de nuestra IP por parte de las páginas o porque realmente hubo un error fatal.

Personalmente la he usado con muchísimos sitios y no me ha dado problemas.

Cabe mencionar que hay otras opciones interesantes como la espera de determinado tiempo antes de tomar la captura, todo ello está en el sitio del módulo.

Lee más sobre JavaScript o Node.JS.

¿Encontraste lo que buscabas?

Si es así, suscríbete para que estés enterado de mis nuevos posts sobre programación e informática

Estoy interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Share via
A %d blogueros les gusta esto: