找不到特定请求时如何退出 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 个请求的情况下需要额外的等待时间。
问题是,有些网站包含测试请求。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 个请求的情况下需要额外的等待时间。