我正在编写一个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);
}
答案 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()
。