问题是,有些网站包含对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();
}
但没有解决我的问题。
答案 0 :(得分:1)
如果您想检查某些内容是否存在,那么您需要检查所有内容以查看它们是否为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请求,则需要额外的等待时间。