【问题标题】:How can you stop a redirection with Zombie.js如何使用 Zombie.js 停止重定向
【发布时间】:2023-04-09 12:26:01
【问题描述】:

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

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() 引发错误,但这不起作用,因为我无法以这种方式检测重定向。如果我检测到我的重定向,我可以做些什么来阻止浏览器加载页面?

【问题讨论】:

    标签: node.js zombie.js


    【解决方案1】:

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

    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)

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2017-04-17
      • 2013-03-06
      • 1970-01-01
      • 2021-07-18
      • 2012-02-26
      • 2012-09-19
      • 2019-11-13
      • 2018-08-01
      相关资源
      最近更新 更多