PuppeteerでCookieを保存・読み込む方法

Puppeteer を使用したクッキーの保存と読み込みは、複数ページにわたるセッション状態を維持する強力な方法です。これは、セッションデータを失うことなく異なるページ間を移動する必要があるウェブスクレイピングタスクで特に有用です。page.cookies()メソッドを使用してウェブページからすべてのクッキーを取得し、page.setCookie()メソッドを使用してクッキーをウェブページに読み込むことができます。HTTP クッキーの詳細については、こちらのブログ記事を参照してください。

Puppeteerでクッキーを保存・読み込む方法のより包括的な例を以下に示します:

      const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // 最初のウェブサイトを開き、読み込み完了を待機
  await page.goto('https://example.com', { waitUntil: 'networkidle2' });

  // 最初のページから全てのクッキーを保存
  const cookies = await page.cookies();
  console.log('example.com のクッキー:', cookies);

  // 2つ目のウェブサイトを開き、読み込み完了を待機
  await page.goto('https://httpbin.org/cookies', { waitUntil: 'networkidle2' });

  // 保存済みのクッキーを2つ目のページに読み込み
  await page.setCookie(...cookies);

  // 2番目のページからクッキーを取得してログ出力し、設定を確認する
  const cookiesSet = await page.cookies();
  console.log('httpbin.orgに設定されたクッキー:', cookiesSet);

  await browser.close();
})();

    

コードの説明

  1. Puppeteerを起動し新規ページを開く: const browser = await puppeteer.launch(); const page = await browser.newPage();
  2. 最初のウェブサイトに移動し、完全な読み込みを待機: await page.goto('https://example.com', { waitUntil: 'networkidle2' });
    waitUntil: 'networkidle2'オプションにより、ページが完全に読み込まれるまで待機します。
  3. 最初のウェブサイトからクッキーを取得してログ出力: const cookies = await page.cookies(); console.log('example.com のクッキー:', cookies);
  4. 2番目のウェブサイトに移動し、完全に読み込まれるまで待機: await page.goto('https://httpbin.org/cookies', { waitUntil: 'networkidle2' });
  5. 保存したクッキーを2番目のウェブサイトに読み込み: await page.setCookie(...cookies);
  6. 2番目のウェブサイトからクッキーを取得してログ出力し検証: const cookiesSet = await page.cookies(); console.log('httpbin.orgに設定されたクッキー:', cookiesSet);
  7. ブラウザを閉じる: await browser.close();

これらの手順に従うことで、Puppeteerを使用して異なるウェブページ間でクッキーが正しく保存・読み込まれることを保証できます。この方法により、ウェブスクレイピング作業中にセッション状態を効果的に維持できます。

より高度なウェブスクレイピングソリューションについては、Bright DataのPuppeteer Browserの利用をご検討ください。自動化されたブロック解除インフラの管理、CAPTCHAの回避、スクレイピングプロジェクトのスケーリングを容易に行うオールインワンソリューションを提供します。

20,000+ 人以上のお客様に世界中で信頼されています

準備はできましたか?