我如何以编程方式在本地主机上创建网页截图以生成工作流屏幕直播
How can I programmatically create screenshots of a web page on my localhost to generate a workflow-screencast?
为了记录我的网页设计过程,我想在每次重新加载页面或保存html文档或样式表时,在我的本地主机上截取一个页面时间戳的屏幕截图。
我使用grunt作为任务运行器,使用无头浏览器phantomjs来捕获页面。使用grunt-localscreenshots https://www.npmjs.org/package/grunt-localscreenshots很容易手动捕获页面。但它很麻烦,需要10秒才能完成任务。屏幕截图过程应该在后台进行,但只有在页面更改或保存时才会持续进行。
所以我编写了这个shellscript,它监视目录中的文件更改并触发phantomjs-script。
while true
do
ATIME=`stat .`
if [[ "$ATIME" != "$LTIME" ]]
then
phantomjs screenshot.js
LTIME=$ATIME
fi
sleep 0.5
done
这是phantomjs-script
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open("http://127.0.0.1:8080/screenshot-test/dev", function(status) {
if (status === "success") {
window.setTimeout(function() {
var now = Date.now();
page.render('screenshots/' + now + '.png');
phantom.exit();
}, 1000);
} else {
console.log("nono");
phantom.exit();
}
});
这个方法可以工作,但是非常不稳定,只有当HTML被更改时才会触发。如果没有任何实际变化,它也需要2或3个重复的截图,有时根本不需要截图。原因可能是页面的呈现时间太长。对于稳定和可用的解决方案有什么想法吗?最理想的是一个grunt任务
我会说使用selenium(与phantomjs/ghostdriver)。我偏爱python绑定,当然也支持Java和其他语言。
您可以通过每半秒获取page_source并检查差异来检查页面更改。在这样的更改中,使用save_screen()方法保存截图。
注意:我看到过save_screen在真正大页面的零字节截图中无声地失败。尽管5-10 MB的屏幕截图通常都很好,但每当我尝试捕获具有数十万行页面的屏幕截图时,我就会反复遇到这个问题。
相关文章:
- 如何在批准露天共享中工作流的审核步骤之前添加确认对话框
- 用于绘制工作流图的JavaScript框架
- 将异步工作流更改为承诺(蓝鸟)
- if 子句在 JavaScript 中限定工作流
- 了解 JavaScript 对象实例或工作流
- 主题和弹性逻辑工作流
- 未捕获的类型错误:对象#<HTML对象元素>没有方法'重新绘制工作流'
- 如何在gump工作流中同时在独立文件和依赖文件中输出javascript
- 在CRM 2011中从JavaScript执行工作流
- 访问Alfresco工作流I'我从JavaScript开始
- 使用 JavaScript 框架的设计器工作流
- 节点 JS 使用异步请求同步工作流
- iOS PhoneGap 调试工作流
- 通过 JavaScript 结束 nintex 工作流
- RxJS 和主/工作线程工作流
- CRM 2011 - 使用 JavaScript 启用潜在顾客实体的工作流加载
- 使用Alfresco获取工作流的文件名
- 将流类型检查添加到 grunt 服务器开发工作流
- 在网页中显示工作流元素的正确方法
- 我如何以编程方式在本地主机上创建网页截图以生成工作流屏幕直播