将签名的cookie传递给木偶操纵者

时间:2018-05-18 20:42:40

标签: 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?

1 个答案:

答案 0 :(得分:1)

您必须提取并使用正确的Cookie格式。

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

  3. 使用...点差将所有Cookie作为参数传递给setCookie

    await page.setCookie(...cookies)
    
  4. 完成!

    如果你想写cookies,那么这是一种格式。

    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的方式无关。

    如果这只是一个饼干像贝宝例如,你通过他们用page.setCookie(cookie),但如果是多个cookie就像你使用EditThisCookie或以上的本地主机例如出口了,那么你必须使用传播运营商,像我上面解释过的三个点。

    您可以在this question上阅读有关传播和休息的更多信息。