我想使用Phantom.JS将各个HTML元素渲染到PNG中。有谁知道这是否可能?另外,我如何使用Phantom.js呈现用户已经在查看的页面?
答案 0 :(得分:50)
要仅渲染页面的一部分,您需要为页面设置clipRect属性,然后再渲染它。
var clipRect = document.querySelector(selector).getBoundingClientRect();
page.clipRect = {
top: clipRect.top,
left: clipRect.left,
width: clipRect.width,
height: clipRect.height
};
page.render('capture.png');
我不明白你问题的第二部分。 Phantom.js无头,意味着没有用户正在看的实际显示。
答案 1 :(得分:22)
工作示例。
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();
});
答案 2 :(得分:5)
您可以使用CasperJS,这是另一个基于PhantomJS的项目。
casper.start('http://www.weather.com/', function() {
this.captureSelector('weather.png', '#wx-main');
});
casper.run();
答案 3 :(得分:0)
以下解决方案对我有用。
var clipRect = document.querySelector(selector).getBoundingClientRect();
page.clipRect = {
top: clipRect.top,
left: clipRect.left,
width: clipRect.width,
height: clipRect.height
};
page.render('capture.png');
但是我注意到只有当我们渲染的图像不是pdf时才会起作用。 要想知道这个pdf,试试这个
page.evaluate(function (element){
$(element).appendTo('body');
$('body > :not(' + element + ')').hide();
}, element);
});
window.setTimeout(function(){
page.render("page.pdf");
},1000);
此链接可能有所帮助: legal integer length
答案 4 :(得分:-5)
我有同样的需要,我试过这个,它对我来说很好用:
不要忘记网址中的http://www
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();
});