Comment rendre partie d'une page avec PhantomJS?

J'aimerais rendre les éléments HTML individuels dans PNG en utilisant Phantom.JS. Est-ce que quelqu'un sait si cela est possible? Aussi, comment utiliser Phantom.js pour rendre une page que l'utilisateur examine déjà?

Pour rendre uniquement une partie de la page, vous devez définir l'attribut clipRect pour la page, puis la rendre.

var clipRect = document.querySelector(selector).getBoundingClientRect(); page.clipRect = { top: clipRect.top, left: clipRect.left, width: clipRect.width, height: clipRect.height }; page.render('capture.png'); 

Je ne comprends pas la deuxième partie de votre question. Phantom.js est sans tête signifiant qu'il n'y a pas d'affichage réel qu'un utilisateur regarde.

Exemple de travail.

 var page = require('webpage').create(); page.open('http://google.com', function() { // being the actual size of the headless browser page.viewportSize = { width: 1440, height: 900 }; var clipRect = page.evaluate(function(){ return document.querySelector('#hplogo').getBoundingClientRect(); }); page.clipRect = { top: clipRect.top, left: clipRect.left, width: clipRect.width, height: clipRect.height }; page.render('google.png'); phantom.exit(); }); 

Vous pouvez utiliser CasperJS, un autre projet basé sur PhantomJS.

 casper.start('http://www.weather.com/', function() { this.captureSelector('weather.png', '#wx-main'); }); casper.run(); 

La solution ci-dessous fonctionne pour moi.

  var clipRect = document.querySelector(selector).getBoundingClientRect(); page.clipRect = { top: clipRect.top, left: clipRect.left, width: clipRect.width, height: clipRect.height }; page.render('capture.png'); 

Mais je remarque que cela fonctionne uniquement si nous rendons une image pas un pdf. Pour discuter de cela pour le pdf, essayez ceci

 page.evaluate(function (element){ $(element).appendTo('body'); $('body > :not(' + element + ')').hide(); }, element); }); window.setTimeout(function(){ page.render("page.pdf"); },1000); 

Ces liens peuvent aider: Comment cacher tous les éléments sauf un en utilisant jquery?

https://github.com/ariya/phantomjs/issues/10465

J'ai eu le même besoin, j'ai essayé cela et ça m'a bien fonctionné:

N'oubliez pas le http://www dans l'URL

 var page = require('webpage').create(); page.open('YourPageURL', function (status) { if (status !== 'success') { console.log('Network Problem'); } else { var p = page.evaluate(function () { return document.getElementById('yourDivID').innerHTML }); console.log(p); } phantom.exit(); });