【发布时间】:2014-10-10 04:06:27
【问题描述】:
我有一个 PhantomJS 脚本,我正在尝试使用它来生成特定网站的视频。
var page = require('webpage').create();
page.viewportSize = {
width: 1280,
height: 720
};
page.open('http://my-awesome-site.whatever', function() {
var fps = 30;
var seconds = 10;
var elapsed = 0;
var current = 0;
takeScreenShot();
function takeScreenShot() {
if (elapsed < seconds * 1000) {
page.render('screenshot_' + (current++) + '.png');
elapsed += 1000 / fps;
setTimeout(takeScreenShot, 1000 / fps);
}
else {
phantom.exit();
}
}
});
上述脚本将尝试在 10 秒内每秒截取 30 张屏幕截图,然后我使用 ffmpeg 将其合并为一个 mp4。
问题在于 page.render() 函数不是即时的,并且不会停止页面上运行的脚本。因此,当我使用 jQuery 动画(我相信它依赖于 setTimeout)指向页面时,这些超时会在处理每个屏幕截图时继续运行。结果,输出的视频看起来大大加快了。
有没有办法通过 PhantomJS 暂停脚本执行?我希望做的是:
page.pause();
page.render('screenshot_' + (current++) + '.png');
page.resume();
但遗憾的是,我在他们的 api 文档中没有看到类似的内容。
【问题讨论】:
标签: javascript jquery webkit jquery-animate phantomjs