【问题标题】:Puppeteer get request redirectsPuppeteer 获取请求重定向
【发布时间】:2020-11-04 12:42:38
【问题描述】:

有什么方法可以使用puppeteer 来获取带有请求响应正文(如果有的话)的重定向吗?

我实现了以下代码,但找不到获取重定向的方法...

const page = await browser.newPage()

page.on('request', (data) => console.log(data));    

await page.on('response', response => {
    const url = response.url();
    response.buffer()
    .then (
        buffer => {
            bufferString = buffer.toString();         
        },
        error => {
          console.log(error)
        }
    )
})

await page.goto('https://www.ford.com', {waitUntil: 'networkidle0'});

【问题讨论】:

    标签: javascript puppeteer google-chrome-headless


    【解决方案1】:

    只需在 response 处理程序中检查 response.status() - 重定向将是 3xx:

    page.on('response', response => {
      const status = response.status()
      if ((status >= 300) && (status <= 399)) {
        console.log('Redirect from', response.url(), 'to', response.headers()['location'])
      }
    })
    

    (重定向通常在响应正文中没有任何有趣的内容,因此您可能不想为它们调用response.buffer()。)

    【讨论】:

      【解决方案2】:

      这应该适用于每种类型的重定向:服务器端和客户端(元刷新、JS 等)

      const page = await browser.newPage()
      
      const redirects = [];
      
      const client = await page.target().createCDPSession();
      await client.send('Network.enable');
      await client.on('Network.requestWillBeSent', (e) => {
          if (e.type !== "Document") {
              return;
          }
          redirects.push(e.documentURL);
      });
      
      await page.goto('https://www.ford.com');
      await page.waitForNavigation();
      
      console.log(redirects);
      

      类似的东西。

      【讨论】:

        【解决方案3】:

        您需要检查响应 url,因为在重定向的情况下,可能会调用多个 URL,我认为只有第一个是 301。

        请注意,我的代码中的 expect 来自 chai 库,但这是可选的,可以使用其他方法进行断言。

        const webpage = await browser.newPage();
        webpage.once('response', response => {
          if (response.url() === 'https://www.ford.com') {
            expect(response.status()).equals(301);
          }
        })
        await webpage.goto('https://www.ford.com');
        

        【讨论】:

          猜你喜欢
          • 2019-01-18
          • 2018-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-06
          • 1970-01-01
          • 1970-01-01
          • 2016-11-28
          相关资源
          最近更新 更多