当被调用超过1次时,打开页面会失败

时间:2015-10-20 16:18:40

标签: javascript phantomjs

我正在编写一个PhantomJS程序,它应该打开一个页面,跟踪它的时间并在控制台中写入加载时间。我的目标是让这个功能运行5次。

问题是当我写“for”循环只执行一次时 - 函数运行正常,但是当我尝试运行它2次时,我收到错误消息,它无法打开地址。似乎第二次没有通过地址。我不知道会出现什么问题。这是我的代码:

var page = require('webpage').create(),
system = require('system'),
t;

//Opening a page and tracking page load time
var loadpage = function (){
    address = 'http://www.google.com';
    t = Date.now();
    page.open(address, function(status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log('Loading ' + address);
            console.log('Loading time ' + t + ' msec');
        }

        phantom.exit();
    });
};

for (var i = 0; i <2 ; i++) {
    loadpage(i);
}

2 个答案:

答案 0 :(得分:4)

page.open()是一个异步函数。如果你在一个循环中调用它,那么即使发送第一个页面请求,循环也会完全执行。问题是在彼此之后立即多次调用page.open()将覆盖先前的调用。最多只能加载最后一个网址。

您需要等待每个页面加载,或者您可以创建多个页面以便并行请求页面。此外,您应该在等待每个页面加载后退出(phantom.exit())PhantomJS。

以下是一些方法:

简单的方法:

var loadpage = function (i, max){
    if (i === max) {
        phantom.exit();
        return;
    }
    var address = 'http://www.google.com';
    t = Date.now();
    page.open(address, function(status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log('Loading ' + address);
            console.log('Loading time ' + t + ' msec');

        }

        loadpage(i+1, max)
    });
};

loadpage(0, 5);

答案 1 :(得分:1)

您似乎不应该在程序中途调用phantom.exit()