我使用的是CapserJS 1.1.0-beta3和PhantomJS 1.8.2。
我调用一个以重定向(HTTP 302)响应的url。PhantomJS自动跟随重定向,但在我的usecase中,PhantomJS不应该遵循重定向。
重定向的调试输出如下所示:
[debug] [phantom] Navigation requested: url=https://foo.com/bar.jsp, type=Other, willNavigate=true, isMainFrame=true 如何将PhantomJS/CapserJS配置为不遵循重定向?
发布于 2014-11-20 11:00:40
有一个小的解决办法是必要的。因此,您需要首先确定哪个URL是重定向。使用resource.received,您将收到对第一个请求的响应,该请求包含应该重定向到的URL。但我们不能从这个事件处理中做任何事。因此,我们保存被标识为重定向目标的目标URL,以供以后使用。
现在,底层无头浏览器(PhantomJS或SlimerJS)遵循重定向,请求新资源,但现在resource.requested为我们提供了中止请求的工具(遗憾的是,CasperJS中没有记录这一点)。最后的脚本如下所示:
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。
https://stackoverflow.com/questions/27021176
复制相似问题