0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PuppeteerでCookieを利用する

Posted at

はじめに

Puppeteerでログインが必要なWebサイトにアクセスしたい時、Cookieを利用する方法について説明します。
昨今は2段階認証が当たり前で、メール認証であればGmail APIと組み合わせて頑張ればPuppeteerからでも全自動でログイン可能ですが、実装の手間がありますし、それ以外の認証方法だと厳しいし、ということでCookieを使ってしまおうという流れです。

Cookieの取得

Chrome拡張機能で簡単にCookie情報が取得できるので、それを活用します。
CookieをダウンロードできるChrome拡張機能はいくつかストアで公開されていますが、以下の事例のようなセキュリティ的な懸念もあるので自分で書いてしまいましょう。
https://qiita.com/rana_kualu/items/e50e33bbde229882da8d

以下のような実装で、簡単にCookieを取得することが可能です。

// "domain"で指定したドメインに該当するクッキーを取得
const cookies = await chrome.cookies.getAll({ domain });

// Puppeteer形式への変換処理
// PuppeteerのsetCookie形式: [{name, value, domain, path, expires, httpOnly, secure, sameSite}, ...]
const puppeteerCookies = cookies.map(c => {
  return {
    name: c.name,
    value: c.value,
    domain: c.domain,
    path: c.path,
    expires: c.expirationDate ? Math.floor(c.expirationDate) : 0,
    httpOnly: c.httpOnly,
    secure: c.secure,
    sameSite: c.sameSite === 'no_restriction' ? 'None' : 
              c.sameSite === 'lax' ? 'Lax' : 
              c.sameSite === 'strict' ? 'Strict' : 'None' 
  };
});

ダウンロード部分の実装

// JSON生成
const jsonStr = JSON.stringify(puppeteerCookies, null, 2);
const blob = new Blob([jsonStr], { type: 'application/json' });
const url = URL.createObjectURL(blob);

// ダウンロード用リンクを作成し、自動でクリック
const downloadLink = document.createElement('a');
downloadLink.href = url;
downloadLink.download = `${domain}_cookies.json`;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
URL.revokeObjectURL(url);

自作したChrome拡張機能を公開しています
https://github.com/ryotakurashiki/CookieExporter

Chrome拡張の公式ドキュメント
https://developer.chrome.com/docs/extensions/reference/api/cookies?hl=ja#method-get

Puppeteerでの利用

const cookies = JSON.parse(fs.readFileSync('./cookies.json', 'utf-8'));
const browser = await puppeteer.launch();
await browser.setCookie(...cookies);

Puppeteerの公式ドキュメント
https://pptr.dev/guides/cookies

おわりに

この方法で、ログインが必要なWebサイトにもPuppeteerからアクセスが可能になります。
当たり前ですがCookie情報にはセキュリティ上重要な情報が含まれているので、取り扱いには注意しましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?