首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CasperJS中防止重定向?

问如何在CasperJS中防止重定向?
EN

Stack Overflow用户
提问于 2014-11-19 15:54:10
回答 1查看 3.3K关注 0票数 6

我使用的是CapserJS 1.1.0-beta3和PhantomJS 1.8.2。

我调用一个以重定向(HTTP 302)响应的url。PhantomJS自动跟随重定向,但在我的usecase中,PhantomJS不应该遵循重定向。

重定向的调试输出如下所示:

代码语言:javascript
复制
[debug] [phantom] Navigation requested: url=https://foo.com/bar.jsp, type=Other, willNavigate=true, isMainFrame=true    

如何将PhantomJS/CapserJS配置为不遵循重定向?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 11:00:40

有一个小的解决办法是必要的。因此,您需要首先确定哪个URL是重定向。使用resource.received,您将收到对第一个请求的响应,该请求包含应该重定向到的URL。但我们不能从这个事件处理中做任何事。因此,我们保存被标识为重定向目标的目标URL,以供以后使用。

现在,底层无头浏览器(PhantomJS或SlimerJS)遵循重定向,请求新资源,但现在resource.requested为我们提供了中止请求的工具(遗憾的是,CasperJS中没有记录这一点)。最后的脚本如下所示:

代码语言:javascript
复制
var casper = require("casper").create();

var redirectURLs = [],
    doLog = true;

casper.on("resource.requested", 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();
    }
});

casper.on("resource.received", function(response){
    if (doLog) console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response) + "\n");
    if (response.status === 301) { // use your status here
        redirectURLs.push(response.redirectURL);
    }
});

casper.start("https://stackoverflow.com/q/27021176").run(function(){
    this.echo("DONE");
    this.exit();
});

这是改编自我的答案A: How to configure Poltergeist or PhantomJS to not follow redirects?

通过将PhantomJS替换为casper.page,您可以在CasperJS中直接使用链接的page版本,但是CasperJS有一些优点。您可以使用casper.on符号将多个处理程序添加到相同的事件中,最重要的是,您可以确定所有资源是以相同的方式处理,还是仅以页面加载的方式处理。所以你可以用resource.received换page.resource.received,用resource.requested换page.resource.requested。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27021176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档