我今天在很多网站上做了一些研究,为了避免手动查看它们,我准备了phantomjs来使用建议的here解决方案来渲染它们。没什么特别的。循环遍历网站数组并渲染所有生成的页面。
有些奇怪的是,有些网站没有正确呈现。其中,我有这个:http://www.telegraaf.nl/
为简化起见,我创建了另一个只运行此页面的脚本:
var page = require('webpage').create();
page.viewportSize = { width: 1920, height: 960 };
page.clipRect = { top: 0, left: 0, width: 1920, height: 960 };
page.open('http://www.telegraaf.nl/', function(status) {
page.render("screenshot.png");
phantom.exit();
});
它没有截图。与任何其他人一起测试,并且完美地工作。 我忽视了什么吗?
答案 0 :(得分:7)
它不会呈现屏幕截图,因为该页面最初没有<body>
,因此无法呈现。在PhantomJS的onLoadFinished事件触发后,所有内容(包括正文)都通过JavaScript加载。
您需要等待一整页加载。一个简单的5秒等待对我来说已经足够了:
page.open('http://www.telegraaf.nl/', function(status) {
setTimeout(function(){
page.render("screenshot.png");
phantom.exit();
}, 5000);
});
你当然可以用更花哨的方式等待,以使其更强大,而不是等待太久:phantomjs not waiting for “full” page load
您可能需要使用--ignore-ssl-errors=true
运行PhantomJS(如果是PhantomJS&lt; 1.9.8,则可能--ssl-protocol=any
。