我想将来自passport.js的会话传递给木偶戏。
我使用var cookies = req.cookies;
来获取Cookie值。
我控制台。记录它,它是这样的:
{ 'connect.sid': 's:qX4ZrttrjydtrjkgsdghsdghrewynZj4Ew2OUh.tTSILkcvgsegsegsegsr99gmW5
0XLcJefM' }
我认为把这个值传递给木偶操作就好了。
但puppeteer有一个page.setCookie()函数,其格式为:
page.setCookie(...cookies)
...cookies <...Object>
name <string> required
value <string> required
url <string>
domain <string>
path <string>
expires <number> Unix time in seconds.
httpOnly <boolean>
secure <boolean>
sameSite <string> "Strict" or "Lax".
returns: <Promise>
那我怎么把puppeteer传给我的饼干?有没有办法将它从原始值转换为puppeteer接受的值?
我的原始cookie上可能是那个大字符串,传递给puppeteer接受的对象的值?
答案 0 :(得分:1)
如果您使用的是MacOS(不幸的是,我目前无法发表评论),我也在一段时间内也在寻找该问题的答案。.答案是使用您的MacOS用户凭据将cookie值加密为SQL DB表,您首先需要使用可以访问您的钥匙串的东西解密(当然需要您的许可)。
一旦被解密,第2部分)会将其转换为Puppeteer可以接受的东西。
有一个NPM软件包可以执行前一个操作,而不是后者(https://github.com/bertrandom/chrome-cookies-secure),但是我已经对其进行了处理,以便它现在可以为任何给定的Chrome配置文件生成支持Puppeteer的cookie。有一个PR请求(https://github.com/bertrandom/chrome-cookies-secure/pull/14)-尚未接受-但我已经在一个实时应用程序上运行了一个月。
将chrome-cookies-secure
的NPM程序包添加到您的应用程序,您将一路顺风。
创建Puppeteer对象的基本要素如下(您应该能够看到index.js对打开的PR的更改以及README.MD中的示例):
// 'cookie' is an array of Objects with keys as written in decrypted SQL DB
let puppeteerCookies = [];
cookies.forEach(function(cookie, index) {
const puppeteerCookieObject = {
name: cookie.name,
value: cookie.value,
expires: cookie.expires_utc,
domain: cookie.host_key,
path: cookie.path
}
if (cookie.is_secure) {
puppeteerCookieObject['Secure'] = true
}
if (cookie.is_httponly) {
puppeteerCookieObject['HttpOnly'] = true
}
puppeteerCookies.push(puppeteerCookieObject)
})
return puppeteerCookies;
希望这会有所帮助。