Capture la capture d'écran de la page chargé par défaut avec Node.js

Je cherche un moyen de prendre une capture d'écran d'une longue page Web chaque fois qu'elle change. J'aimerais utiliser Node.js pour cela. Ma question porte sur la façon de rendre la page complète avec des images et de l'enregistrer sur l'annonce de disque d'un fichier image.

La plupart des images sur la page Web sont chargées. Donc, je suppose que j'ai besoin de faire défiler la page entière d'abord avant de prendre une capture d'écran.

J'ai essayé différents outils:

  • Casperjs
  • Nœud-webshot
  • Phantomjs

Tous semblent trop compliqués, voire impossibles, même à installer. Je n'ai réussi avec aucun d'entre eux.

Casperjs semble être un très bon choix, mais je ne peux pas le faire fonctionner dans node.js. Il continue à se plaindre, que casper.start () n'est pas une méthode valide …

Je me suis rapproché avec node-webshot , mais je n'ai pas réussi à faire défiler la page.

C'est mon code jusqu'à présent:

var webshot = require('webshot'); var options = { shotSize: { height: 'all', streamType: 'jpg' } }; webshot('www.xx.com', 'xx.com.jpg', options, function(err) { // screen shot saved to 'xx.com.jpg' }); 

BTW Je me développe sur un Mac. L'application Node finie sera sur un serveur linux.

Tous les commentaires ou expériences sont appréciés!

Ne peut pas vraiment aider à installer CasperJS car, sur Windows, il fonctionne en utilisant simplement npm install casperjs -g .

J'ai mis en place un script simple pour faire des captures d'écran:

 var casper = require('casper').create(); casper.options.viewportSize = {width: 1600, height: 950}; var wait_duration = 5000; var url = 'http://stackoverflow.com/questions/33803790/capture-screen-shot-of-lazy-loaded-page-with-node-js'; console.log("Starting"); casper.start(url, function() { this.echo("Page loaded"); }); casper.then(function() { this.scrollToBottom(); casper.wait(wait_duration, function() { casper.capture('screen.jpg'); this.echo("Screen captured"); }); }); casper.then(function() { this.echo("Exiting"); this.exit(); }); casper.run(); 

Le code est assez simple:

  • Chargez l'url
  • Faites défiler jusqu'au bas
  • Attendez une durée spécifique ( wait_duration ) pour que les choses wait_duration
  • Faire une capture d'écran
  • Fin

J'espère que cela fonctionne pour vous!

Ce code fonctionne pour moi avec un nœud dans OSX, enregistrez-le comme test.js et exécutez node test.js dans CLI

 var webshot = require('webshot'); var options = { streamType: 'png', windowSize: { width: 1024, height: 768 }, shotSize: { width: 'all', height: 'all' } }; webshot("blablabla.com","bla-image.png",options,(err) => { if(err){ return console.log(err); } console.log('image succesfully'); }); 

Vous pouvez l'automatiser via Selenium, http://webdriver.io/ . Oui, c'est comme un moteur de test, pas une application de capture d'écran, mais vous pouvez contrôler complètement l'automatisation du navigateur et voir le navigateur sur votre écran pendant le débogage

  • Démarrez le serveur de sélénium, avec, par exemple, Google Chrome
  • Chargez votre page
  • Faites défiler, cliquez, tout avec webdriver.io
  • Prenez une photo lorsque vous pensez que c'est un bon moment
  • Fermer la session

Un moyen rapide d'installer du sélénium avec nodejs -> https://github.com/vvo/selenium-standalone