我无法始终让PhantomJS或phantomjs-node在资源密集的站点上运行。例如,我成功申请http://www.huffingtonpost.com
约50%。 PhantomJS通常会挂在广告请求上。
像netsniff.js,netlog.js和confess.js这样的PhantomJS文档中的所有网络示例似乎都有相同的问题。
我尝试了一些方法:设置resourceTimeout
值,并尝试一些间隔来检查资源请求的已用时间,并在超过一定时间时中止。我没有运气。
resourceTimeout
似乎只是偶尔使用。
我的代码:
phantom.create(function (ph) {
ph.createPage(function(page) {
page.resources = [];
page.set('settings.resourceTimeout', 800);
page.set('settings.userAgent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0');
page.set('onResourceTimeout', function(error) {
console.log(error)
})
page.onResourceRequested(function(requestData, networkRequest) {},
function(req) {
page.resources[req.id] = {
request: req
}
})
page.open('http://www.huffingtonpost.com', function(status) {
if (status !== 'success') {
console.log("Failed to load");
ph.exit(1);
}
else {
callback(page.resources);
ph.exit();
}
})
})
});
我在有权访问networkRequest
的回调中尝试了以下内容:
var clock;
clearInterval(clock);
function check(){
var current_time = new Date();
var request_time = requestData.time;
var diff = Math.abs(current_time - request_time);
if (diff > 1500) {
networkRequest.abort();
};
}
clock = setTimeout(check, 2000);
检查似乎失败了Error: cannot access member 'abort' of deleted QObject
。
我正在尝试识别所有资源,因此我不一定要忽略任何请求。有什么想法吗?