Phantomjs工作但很慢

时间:2012-10-30 17:15:23

标签: javascript phantomjs webpage-screenshot

我正在尝试使用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

3 个答案:

答案 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事件。

enter image description here

答案 2 :(得分:2)

我没想到以下内容会起作用,但对我而言(在Windows上)确实如此:

打开Internet Explorer&gt;互联网选项&gt;连接&gt; LAN设置并禁用“自动检测设置”

原帖:https://plus.google.com/+MatthiasG%C3%B6tzke/posts/9v9BMCJj2k6