puppeteerでCookieを使ってログインをする

公開日時

puppeteerで認証を行う際に、初回は通常ログインをして、2回目以降はCookeの情報を使ってログインするようにしたかったので対応した。

nodejsでファイルの存在確認をする際に、[[fs.exists]]はDeprecatedになっていたが、[[fs.existsSync]]はDeprecatedではなかったのでこちらを使った。

こんな感じ。

import puppeteer from 'puppeteer';
import fs from 'fs';

export const login = async (browser) => {
  const page = await browser.newPage();

  const cookieFilePath = `${process.cwd()}/cookies.json`;
  
  if (fs.existsSync(cookieFilePath)) {
    console.log('from cookie');
    const cookies = JSON.parse(fs.readFileSync(cookieFilePath, 'utf-8'));
    for (let cookie of cookies) {
      await page.setCookie(cookie);
    }
  } else {
    console.log('from login page');
    const url = 'https://your-login-site-url';
    await page.goto(url, {
      waitUntil: 'domcontentloaded'
    });
    await page.click('#login');

    const cookies = await page.cookies();
    fs.writeFileSync(cookieFilePath, JSON.stringify(cookies));
  }
  return page;
};

参考


Related #js