如何配置Poltergeist或PhantomJS不跟随重定向?[英] How to configure Poltergeist or PhantomJS to not follow redirects?

问题描述

我有一些测试要求 JS 驱动程序不遵循重定向.是否可以配置 Poltergeist 来做到这一点?

我注意到可以使用 命令行界面向 PhantomJS 传递命令,所以也许这是另一种方法?

推荐答案

我不熟悉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 重定向.

本文地址:https://www.itbaoku.cn/post/1739895.html