otakustay
2013-05-04 16:50:10 +08:00
这个问题的核心不是技术,而是什么是“js渲染完毕”。
我举个例子,有一个页面,每5秒从后端拉一次数据,在页面上更新几个条目,永远这样不结束,那么这个页面什么时候“渲染完毕”?
如果你可以定出一个渲染完毕的标准,那么你就可以通过定时地检测这个标准来判断,比如下面的代码是把“一个id叫username的span元素出现”作为标准的(不少网站是页面展现完再去加载一次当前用户信息,在右上角显示个用户名,以此为例):
function check() {
// 在这里写你自已的标准
return document.getElementById('username');
}
function waitForReady() {
if (!check()) {
return setTimeout(waitForReady, 50); // 每50毫秒检查一下
}
else {
// phantom与页面的通信推荐用alert来做
alert('ready');
}
}
waitForReady();
在phantom中的代码这么来(已经有点忘了phantom的API了):
var page = new WebPage();
page.onAlert = function (message) {
if (message === 'ready') {
takeScreenshot(page); // 截图
}
}
page.open(url, function () { console.log('page loaded but not ready'); });