我有一些测试需要JS驱动程序不遵循重定向。是否可以配置Poltergeist来执行此操作?
我注意到可以使用Command Line Interface将命令传递给PhantomJS,所以这可能是另一种方法吗?
答案 0 :(得分:5)
我对Poltergeist并不熟悉,所以我只想回答关于PhantomJS的问题。
您需要的只是两个事件处理程序page.onResourceRequested
和page.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重定向。