Puppeteerで3rd-party cookieを保存・利用したい場合の処理についてまとめました。ログイン処理がクロスサイトになっているWebページをPuppeteerで利用する場合など、下記の知識が必要になることがあります。
cookieのセーブ
cookieを保存するファイルをtmpdirに作る方針のコードです。別のパスに保存する場合はよしなに変更してください。
constos=require('os');constpath=require('path');constfs=require('fs').promises;/*(中略)*/try{constclient=awaitpage.target().createCDPSession();constallBrowserCookies=(awaitclient.send('Network.getAllCookies')).cookies;constcookiePath=path.join(os.tmpdir(),'cookies.json');awaitfs.writeFile(cookiePath,JSON.stringify(allBrowserCookies,null,2));}catch(err){// do nothingconsole.log(err)}
このコードのポイントはCDP (Chrome DevTools Protocol)のメソッドを呼び出してcookieを取り出している部分です。page.cookies()
だと現在のURLに紐付いているcookieしか返してくれないので、3rd-party cookieが必要な場合は使えません。
cookieの読み込み・利用
cookieの読み込みは特に注意点はありません。
下記コードではファイルが見つからなかったときのエラーを無視していますが、仕事のコードならもう少し真面目にエラー処理を書いた方がいいと思います。
constos=require('os');constpath=require('path');constfs=require('fs').promises;/*(中略)*/try{constcookiePath=path.join(os.tmpdir(),'cookies-dmarcket.json');constcookiesString=awaitfs.readFile(cookiePath);constcookies=JSON.parse(cookiesString);awaitthis.page.setCookie(...cookies);}catch(err){// do nothingconsole.log(err)}