Chr*_*ris 16 javascript webpage-screenshot phantomjs
我试图用PhantomJS截取一个网页的截图.具体地讲,我使用捕获的示例espn.com从这个例子.我的代码看起来像这样:
var page = new WebPage();
page.open('http://www.espn.com', function (status) {
page.render('fb.png');
phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)
然后我使用我的终端或命令提示符转到我的PhantomJS目录并运行:
phantomjs shotty.js
Run Code Online (Sandbox Code Playgroud)
一切都运行良好,但完成输出图像需要6-8秒.这是正常的吗?有没有更快的方法来实现这一点,以便它在一秒或更短的时间内完成?
我使用的是CentOS和Windows 7.两个盒子都有8GB的RAM,3.2 GHz的CPU,我在speedtest.net上的速度下降了22Mbp/s,速度达到了1Mbp/s
Dev*_*oop 24
好吧,在我的情况下,页面正在等待一些GET请求,并且无法访问请求的服务器并且它一直等待很长时间.当我使用远程调试器选项时,我只能想出来.
phantomjs --remote-debugger-port=9000 loadspeed.js <some_url>
Run Code Online (Sandbox Code Playgroud)
并在loadspeed.js文件中
page.onResourceRequested = function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
};
page.onResourceReceived = function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
};
Run Code Online (Sandbox Code Playgroud)
然后在任何webkit浏览器(safari/chrome)中加载localhost:9000并查看控制台日志,我可以在其中找出它长时间等待一些无法访问的请求.
通过这个 - 减少超时:
page.settings.resourceTimeout = 3000; //in milliseconds
Run Code Online (Sandbox Code Playgroud)
之后事情很快.希望这可以帮助
是的,这是正常的.当您尝试渲染时,PhantonJS仍将等待page.open事件触发load事件以表示已加载整个DOM.
看看我espn.com在系统上本地加载时会发生什么.DOMContentLoaded完成需要大约2秒钟,然后大约需要7秒ready才能触发事件.

| 归档时间: |
|
| 查看次数: |
17923 次 |
| 最近记录: |