我想单独的HTML元素呈现到使用Phantom.JS PNG格式。 有谁知道这是否可能? 另外,我怎么会用Phantom.js呈现一个页面,用户已经在看什么?
Answer 1:
要仅渲染你需要设置页面的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是无头的意思,有一个用户在看没有实际的显示。
Answer 2:
工作示例。
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();
});
Answer 3:
您可以使用CasperJS,基于PhantomJS另一个项目。
casper.start('http://www.weather.com/', function() {
this.captureSelector('weather.png', '#wx-main');
});
casper.run();
Answer 4:
下面的解决方案对我的作品。
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。 要wokaround此为PDF格式,试试这个
page.evaluate(function (element){
$(element).appendTo('body');
$('body > :not(' + element + ')').hide();
}, element);
});
window.setTimeout(function(){
page.render("page.pdf");
},1000);
该链接可以帮助: 如何隐藏使用jQuery除一人外的所有元素?
https://github.com/ariya/phantomjs/issues/10465
Answer 5:
我有同样的需要,我想这和它为我工作得很好:
不要忘了http://www
的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();
});
文章来源: How to render part of a page with PhantomJS?