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.
Lo que alcanzaremos al final será guardar una página web como una imagen PNG. También veremos algunas opciones que el paquete ofrece.
Instala Node y NPM o actualiza NPM.
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í:
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:
/**
* Ejemplificar uso de node-webshot con PhamtomJS
* para guardar una página web como una imagen
*
* @author parzibyte
*/// Requerir módulo
const webshot = require("node-webshot");
// Algunas constantes explicativas
const SITIO_WEB = "https://www.facebook.com/",
NOMBRE_IMAGEN_SALIDA = "salida.png";
// Opciones para tomar captura
const OPCIONES = {
customHeaders: {
'Accept-Language': 'es_LA', // Lenguaje de la página
},
shotSize: {
width: 'all',
height: 'all'
},
screenSize: {
width: 1024, // Anchura de pantalla
height: 760, // Altura de pantalla
},
// Indicar que "somos" Chrome en Windows
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
};
// Función que se llama cuando la captura se ha tomado
const cuandoSeTomeCaptura = err => {
// Puede que haya un error
if (err) {
console.log("Lo siento, ocurrió un error: ", err);
} else {
console.log(`La página ${SITIO_WEB} ha sido guardada en ${NOMBRE_IMAGEN_SALIDA}`);
}
};
// Ahora sí, tomar captura o screenshot
webshot(SITIO_WEB, NOMBRE_IMAGEN_SALIDA, OPCIONES, cuandoSeTomeCaptura);
La forma más básica de esto es llamar a la función webshot que toma 4 argumentos:
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.
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.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.