我正在使用 node.js,显然我可以访问我签名的 cookie。
它们是这样的形式:
{ 'connect.sid': 's:qX4ZrttrjydtrjkgsdghsdghrewynZj4Ew2OUh.tTSILkcvgsegsegsegsr99gmW5
0XLcJefM' }
Puppeteer 支持 cookie,为了传递 cookie 的参数,有这个功能:
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>
如您所见,您直接提供每个字段的参数。 有没有办法将我签名的 cookie 直接传递给 puppeteer?
最佳答案
您必须提取并使用正确的 cookie 格式。
- 首先安装这个名为 EditThisCookie 的扩展程序.
使用
...
传播将所有 cookie 作为参数传递给setCookie
。await page.setCookie(...cookies)
完成!
如果你想写 cookie,那么这里有一个格式。
const cookies = [
{
"domain": "localhost", // google.com, yahoo.com etc. Without the host
"hostOnly": true,
"httpOnly": true,
"name": "connect.sid", // here is the actual cookie name
"path": "/",
"sameSite": "no_restriction",
"secure": false,
"session": true,
"storeId": "0",
"value": "s%3AliYZ-M8urEQLfgn2_kSG_FIPwVTr5VQs.5rrJW7hzuXebekzTRgPYFTYri5nljhGCp8Dz%2FgLoSN4", // and the value
"id": 1
}
]
工作示例
const cookie = {
name: 'login_email',
value: 'set_by_cookie@domain.com',
domain: '.paypal.com',
url: 'https://www.paypal.com/',
path: '/',
httpOnly: true,
secure: true
}
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.setCookie(cookie)
await page.goto('https://www.paypal.com/signin')
await page.screenshot({
path: 'paypal_login.png'
})
await browser.close()
如果您注意到原始文档,它会显示带有三个点的 page.setCookie(...cookies)
cookie。这基本上意味着您可以通过这种方式将对象数组作为参数传递。
如何将数据放入 cookie 变量取决于您,您可以对其进行硬编码,您可以使用一些数据库等。这与您如何传递 cookie 无关。
如果它只是一个像 paypal 示例中的 cookie,则使用 page.setCookie(cookie)
传递它们,但如果它是像您使用 EditThisCookie 或上面的 localhost 示例导出的多个 cookie,那么您必须使用带有三个点的扩展运算符,就像我上面解释的那样。
您可以在 this question 上阅读有关传播和休息的更多信息.
关于node.js - 将签名的 cookie 传递给 puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50418994/