如何使用Zombie.js停止重定向

时间:2015-03-09 23:13:34

标签: node.js zombie.js

我正在使用Zombie.js来解析具有多个重定向的网址。出于某种原因,我希望能够检测到某种类型的重定向,然后停止处理(不要遵循该重定向)。

var browser = new Browser();
browser.on('redirect', function(request, response, redirectRequest){
  var redirectUrl = response.url;
  if (redirectUrl === 'http://www.example.com'){
     //Do something and stop the processing
  }
});

browser.visit(urlToLoad).then(function() {
    //Do something
});

我尝试添加管道处理程序并使用next()抛出错误,但这不起作用,因为我无法以这种方式检测重定向。如果我检测到我的重定向,有什么办法可以阻止浏览器加载页面吗?

1 个答案:

答案 0 :(得分:0)

取决于“停止”的含义。您当然可以使用辅助变量检测管道上的重定向。在我的情况下,我必须检测重定向是否是登录表单,执行登录然后返回到原始页面。我找到了一种混合管道和事件监听器的方法:

let redirectedFrom = null;

Browser.extend(function(browser) {
  browser.on('redirect', function(request, response) {
    if (response.status === 302 && response.url === 'login_page')) {
      redirectedFrom = request.headers.get('referer');
    }
  });
});

const browser = new Browser();

browser.pipeline.addHandler(function(browser, request, response) {
    if (redirectedFrom !== null) {
      // do something interesting here
      redirectedFrom = null;
    }
    return response;
});

现在当我browser.visit()并被重定向到登录页面时,我可以登录visit(redirectedFrom)