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;
};