0

資格情報を使用して Web サイトにアクセスし、puppeter を使用して PDF をダウンロードしようとしています。puppeteer を使用して pdf の URL を取得しましたが、今は node-fetch を使用してそのページにアクセスしたいと考えています。PDFページを取得するには、オプションにセッションデータを含める必要がありますが、正しい方法で行っているかどうかわかりません。

「credentials: 'include'」を使用して、page.cookies で Cookie を取得し、フェッチで送信されるオプションにその他の小さな変更を加えてみました。

 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')));

test4 を txt として開くと、ログイン ページの html が表示されます。これは、セッションが失われたことを意味します。セッションを維持して PDF をダウンロードするにはどうすればよいですか?

4

1 に答える 1

0

もちろん、fetch メソッドはセッションを維持できず、ヘッドレス ブラウザでは開かれません。

残念なことに、操り人形師では PDF のダウンロードがサポートされていないようです: https://github.com/GoogleChrome/puppeteer/issues/1248

通常、ログインするには goto(loginPage) と必要なページに移動する必要があります。Cookie はページ オブジェクト内で管理されます。

于 2019-01-23T14:15:51.633 に答える