我在使用PhantomJS时遇到了一些问题。我指的是this article。我试图嵌套open()
函数,但我没有得到我想要的结果,即打开所有4个网址并打印所有4个console.log
。
代码:
var page = require('webpage').create(); //新建一个页面
url1 = "-----";
url2 = "-----";
url3 = "-----";
url4 = "http://-----/";
page.open(url1, function(status) { //导航到第一个URL
console.log('111111111111');
if (status == "fail") phantom.exit(); //如果发生错误,退出程序
page.open(url2, function(status) { //否则在页面加载完成的回调函数中继续导航到第二个URL,依次类推
console.log('22222222222222');
if (status == "fail") phantom.exit();
page.open(url3, function(status) {
console.log('3333333333333333');
if (status == "fail") phantom.exit();
page.open(url4, function(status) {
console.log('444444444444444');
if (status == "fail") phantom.exit();
});
});
});
console.log('close');
phantom.exit();
});
结果:
$ phantomjs test.js
111111111111
close
答案 0 :(得分:2)
完成执行后你必须exit
PhantomJS,而open
url4
之后你似乎已经完成了:
page.open(url1, function(status) {
console.log('111111111111');
if (status == "fail") phantom.exit();
page.open(url2, function(status) {
console.log('22222222222222');
if (status == "fail") phantom.exit();
page.open(url3, function(status) {
console.log('3333333333333333');
if (status == "fail") phantom.exit();
page.open(url4, function(status) {
console.log('444444444444444');
if (status == "fail") phantom.exit();
console.log('close');
phantom.exit();
});
});
});
});
正如Nicolas在博客中所说,PhantomJS是异步的。你太早退出了。