当PhantomJS出现资源错误时,我可以获取失败的请求ID吗?

时间:2013-07-11 01:12:57

标签: phantomjs

我不太明白为什么PhantomJS只返回onResourceError回调请求的url,而另一个two resource callbacks则返回请求ID。如果对同一个URL有多个请求,那么“找到哪个请求确实失败了”真的是不可能的。有谁知道如何获取失败的请求ID?

2 个答案:

答案 0 :(得分:2)

实际上,这只是旧文档。 onResourceError具有失败请求的ID。

page.onResourceError = function(resourceError) {
    console.log('Unable to load resource (request ID:' + resourceError.id + 'URL:' + resourceError.url + ')');
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);

};

答案 1 :(得分:1)

为什么你真的需要请求身份证?

由于1.9中添加了onResourceError,因此可能缺少某些信息。

解决问题的一种方法是在数组中保留所有请求的resourcessuach,如netsniff示例中所示。 这是一个非常基本的实现:

var page = require('webpage').create(),
    system = require('system');


if (system.args.length === 1) {
    console.log('Usage: netsniff.js <some URL>');
    phantom.exit(1);
} else {

    page.address = system.args[1];
    page.resources = [];

    page.onLoadStarted = function () {
        page.startTime = new Date();
    };

    page.onResourceRequested = function (req) {
        page.resources[req.id] = {
            request: req,
            startReply: null,
            endReply: null
        };
    };

    page.onResourceReceived = function (res) {
        if (res.stage === 'start') {
            page.resources[res.id].startReply = res;
        }
        if (res.stage === 'end') {
            page.resources[res.id].endReply = res;
        }
    };

    page.onResourceError = function(resourceError) {
    console.log('Unable to load resource (URL:' + resourceError.url + ')');
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);

    page.resources.forEach(function (resource) {
    var request = resource.request,
            endReply = resource.endReply;

        if (request && request.url === resourceError.url && !endReply) {
            console.log('request id was :' + request.id);
        }
    })

};


    page.open(page.address, function (status) {
        var har;
        if (status !== 'success') {
            console.log('FAIL to load the address');
            phantom.exit(1);
        } else {
            page.endTime = new Date();
            page.title = page.evaluate(function () {
                return document.title;
            });
            console.log(page.title);
            phantom.exit();
        }
    });
}

onResourceError,您只需找到与错误资源网址匹配的第一个/最后一个/所有录制的网址。