如果找不到特定请求,我该如何退出PhantomJS?

时间:2015-09-01 09:16:10

标签: javascript get request phantomjs exit

问题是,有些网站包含对test.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();
}

但没有解决我的问题。

1 个答案:

答案 0 :(得分:1)

如果您想检查某些内容是否存在,那么您需要检查所有内容以查看它们是否为first-order logic¬∃x P(x) ↔ ∀x ¬P(x)

您首先需要查看所有请求,以确定您的预期请求是否存在。例如:

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请求,则需要额外的等待时间。