我正在尝试使用PhantomJS截取网页截图。具体来说,我使用的是从this示例中捕获espn.com
的示例。我的代码如下所示:
var page = new WebPage();
page.open('http://www.espn.com', function (status) {
page.render('fb.png');
phantom.exit();
});
然后我使用终端或命令提示符转到我的PhantomJS目录并运行:
phantomjs shotty.js
一切都运行良好,但完成输出图像需要6-8秒。这是正常的吗?有没有更快的方法来实现这一点,以便它在一秒或更短的时间内完成?
我正在使用CentOS和Windows 7.两个盒子都有8GB内存,3.2 GHz CPU,我在speedtest.net上的速度下降了22Mbp / s,速度达到了1Mbp / s
答案 0 :(得分:24)
嗯,在我的情况下,页面正在等待一些GET请求,并且无法访问请求的服务器并且它一直等待很长时间。我只能在使用远程调试器选项时解决这个问题。
phantomjs --remote-debugger-port=9000 loadspeed.js <some_url>
并在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));
};
然后在任何webkit浏览器(safari / chrome)中加载localhost:9000并查看控制台日志,我可以在其中找出它长时间等待一些无法访问的请求。
通过旁观 - 减少超时:
page.settings.resourceTimeout = 3000; //in milliseconds
之后事情很快。希望这有帮助
答案 1 :(得分:9)
是的,这是正常的。当您尝试渲染时,PhantonJS仍会等待page.open
事件触发load
事件,以表示已加载整个DOM。
看看在我的系统上本地加载espn.com
时会发生什么。
DOMContentLoaded完成需要大约2秒钟,然后需要大约7秒才能触发ready
事件。
答案 2 :(得分:2)
我没想到以下内容会起作用,但对我而言(在Windows上)确实如此:
打开Internet Explorer&gt;互联网选项&gt;连接&gt; LAN设置并禁用“自动检测设置”
原帖:https://plus.google.com/+MatthiasG%C3%B6tzke/posts/9v9BMCJj2k6