找不到特定请求时如何退出 PhantomJS?

How can I exit PhantomJS when a specific request is not found?

问题是,有些网站包含测试请求。com/test.aspx 而有些则没有。

如果请求存在,它应该打印 JSON 并退出。 如果请求不存在,它也应该退出 - 目前,在这种情况下它保持打开状态。

另外,我怎样才能使代码更好?如果可能的话,也许会更快?

我的JS代码:

var Url = "http://www.test.de";
var params = new Array();
var webPage = require('webpage');
var page = webPage.create();
var targetJSON = {};
page.open(Url);
page.onResourceRequested = function(requestData, networkRequest) {
var match = requestData.url.match(/test.com\/test.aspx/g);
if (match != null) {
    var targetString = decodeURI(JSON.stringify(requestData.url));
    var klammerauf = targetString.indexOf("{");
    var jsonobjekt = targetString.substr(klammerauf,     (targetString.indexOf("}") - klammerauf) + 1);
    targetJSON = (decodeURIComponent(jsonobjekt));
    console.log(targetJSON);
    phantom.exit();
} 

};

我尝试添加

} else {
  phantom.exit();
}

} if (match == null) {
phantom.exit();
}

但没有解决我的问题。

如果你想检查某物是否不存在,那么你需要检查所有的东西,看看它们是否不存在或 first-order logic:

您首先需要查看所有请求,以了解您的预期请求是否存在。例如像这样:

var found = false;
page.onResourceRequested = function(requestData, networkRequest) {
    var match = requestData.url.match(/test.com\/test.aspx/g);
    if (match != null) {
        var targetString = decodeURI(JSON.stringify(requestData.url));
        var klammerauf = targetString.indexOf("{");
        var jsonobjekt = targetString.substr(klammerauf,     (targetString.indexOf("}") - klammerauf) + 1);
        targetJSON = (decodeURIComponent(jsonobjekt));
        console.log(targetJSON);
        found = true;
        phantom.exit();
    } 
};
page.open(Url, function(){
    setTimeout(function(){
        console.log("found: " + found); // will always print "false"
        phantom.exit();
    }, 1000);
});

我用一个全局变量解决了这个问题,该变量表示是否找到了请求。如果不是,那么您可以退出 PhantomJS。如果等到页面加载完毕,并且在有 Ajax 个请求的情况下需要额外的等待时间。