如何配置Poltergeist或PhantomJS不遵循重定向?

时间:2014-11-07 20:05:47

标签: rspec phantomjs poltergeist

我有一些测试需要JS驱动程序不遵循重定向。是否可以配置Poltergeist来执行此操作?

我注意到可以使用Command Line Interface将命令传递给PhantomJS,所以这可能是另一种方法吗?

1 个答案:

答案 0 :(得分:5)

我对Poltergeist并不熟悉,所以我只想回答关于PhantomJS的问题。

您需要的只是两个事件处理程序page.onResourceRequestedpage.onResourceReceived。 HTTP重定向会同时生成HTTP请求和HTTP响应,因此在收到重定向响应时会调用处理程序。然后,您可以将重定向URL添加到数组中,并且在实际发送重定向请求时,您可以检测并停止它。

var redirectURLs = [],
    doLog = true;

page.onResourceRequested = function(requestData, networkRequest) {
    if (doLog) console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData) + "\n");
    if (redirectURLs.indexOf(requestData.url) !== -1) {
        // this is a redirect url
        networkRequest.abort();
    }
};

page.onResourceReceived = function(response) {
    if (doLog) console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response) + "\n");
    if (response.status >= 300 && response.status < 400 && response.redirectURL) { // maybe more specific
        redirectURLs.push(response.redirectURL);
    }
};

这仅适用于HTTP重定向。还有其他类型的重定向需要其他解决方案。例如HTML重定向或JavaScript重定向。