如何使用来自伪造者页面的会话数据来获取URL?

时间:2019-01-23 13:38:27

标签: node.js session puppeteer node-fetch

我正尝试使用我的凭据进入一个网站,并使用puppeter下载pdf。我使用puppeteer获取了pdf网址,但现在我想使用node-fetch访问该页面。要获取pdf页面,我需要在选项中包括会话数据,但是我不知道我是否使用正确的方法。

我尝试使用'credentials:'include',将cookie与page.cookies和其他一些小的修改一起随提取一起发送。

 var response = await page.goto(urlPdf);
 var headersPup = response.request().headers(); 

 const { cookies } = await page._client.send("Network.getAllCookies", {});

  const sessionFreeCookies = cookies.map((cookie) => {
    return {
      ...cookie,
      expires: Date.now() / 1000 + 10 * 60,
      session: false
    };
  });

  headersPup['Cookie'] = sessionFreeCookies; //adding the cookies to header
  headersPup['Content-Type'] = 'application/pdf';//adding content-type

  var opts = {
      method: "GET",
      headers: headersPup,
      credentials: "include",
  }

  await fetch(urlPdf,opts).then(response => response
    .body.pipe(fs.createWriteStream('test4.pdf'))
    .on('close', () => console.log('pdf downloaded')));

当我以txt打开test4时,我可以看到登录页面html,这意味着我丢失了会话。如何保留会话以下载pdf文件?

1 个答案:

答案 0 :(得分:0)

当然,获取方法无法保留会话,它不会在无头浏览器中打开。

伪造者https://github.com/GoogleChrome/puppeteer/issues/1248似乎不支持pdf下载。

通常要登录,您需要先进入(loginPage)和,然后再进入所需的页面,Cookie在页面对象中进行管理。