node.js - 将签名的 cookie 传递给 puppeteer

标签 node.js session cookies puppeteer

我正在使用 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 格式。

  1. 首先安装这个名为 EditThisCookie 的扩展程序.
  2. 然后导出你的cookie。您将获得一系列 cookie。 enter image description here

  3. 使用 ... 传播将所有 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/

相关文章:

c# - 需要在 HttpWebResponse 中访问 HttpOnly cookie

Asp.NET Identity 停止在 Chrome 上工作

javascript - 如何在 Javascript 中将一个函数的响应提供给另一个函数?

node.js - Node Http 服务器 - 请求收到两次

php - SessionHandlerInterface::write 和 SessionUpdateTimestampHandlerInterface::updateTimestamp 有什么区别?

perl - Mojo::CookieJar - 如何从文件加载 cookie

javascript - 如何使用 Express 设置和检索 BookshelfJS 实例?

javascript - 根据用户时区返回本地货币代码

PHP、MySQL - 登录\注销问题,仅在第二次尝试后才能登录

PHPUnit 无法发送 session cookie - header 已发送