You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppeteer修改__Secure-3PSIDCC Cookie提示Invalid cookie fields问题求助

问题概述

修改__Secure-3PSIDCC Cookie在Firefox中可正常生效,但使用Puppeteer操作Chromium时触发ProtocolError: Protocol error (Network.setCookies): Invalid cookie fields错误。

错误日志

DevTools listening on ws://127.0.0.1:33837/devtools/browser/e3f433a2-8a43-481b-9a2f-b6aa4a923228
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[27423:27516:0915/232908.850008:ERROR:nss_util.cc(349)] After loading Root Certs, loaded==false: NSS error code: -8018
/home/bonk/Kisa/testing/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:298
                error: new Errors_js_1.ProtocolError(),
                       ^

ProtocolError: Protocol error (Network.setCookies): Invalid cookie fields
    at /home/bonk/Kisa/testing/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:298:24
    at new Promise (<anonymous>)
    at CDPSession.send (/home/bonk/Kisa/testing/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:294:16)
    at Page.setCookie (/home/bonk/Kisa/testing/node_modules/puppeteer/lib/cjs/puppeteer/common/Page.js:869:67)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async f (/home/bonk/Kisa/testing/test.js:75:5) {
  originalMessage: 'Invalid cookie fields'
}

相关代码

const f = (async() => {
    const browser = await puppeteer.launch({      
      dumpio: true,
      headless: false
    });
    const page = await browser.newPage();
    page.setUserAgent(
  "Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"
);
    const cookies = [
    {
      'name': '__Secure-3PSIDCC',
      'value': 'hello', domain: '.google.com'
    }
    ];
    await page.setCookie(...cookies);
    await page.goto("https://google.com");
    await setTimeout(async() =>{
        const link = await page.evaluate(() => document.querySelector('*').outerHTML);
        await page.mouse.click(782, 354);
        await setTimeout(async() =>{
        await page.bringToFront();
        await page.mouse.click(782, 354);
      }, 10);
    }, 10000);
});
f();

解决方法

Chromium对带有__Secure-前缀的Cookie执行更严格的规则,这类Cookie必须满足两个条件才能被正确设置:

  • 必须指定secure: true,因为__Secure-前缀要求Cookie仅通过HTTPS传输
  • 建议显式指定url字段(或确保在设置Cookie前已访问目标HTTPS站点,显式指定更可靠)

另外,page.setUserAgent是异步方法,需要添加await关键字确保执行完成;原代码中setTimeout搭配await的写法存在问题,需将setTimeout包装为Promise才能正确控制异步流程。

修改后的代码如下:

const f = (async() => {
    const browser = await puppeteer.launch({      
      dumpio: true,
      headless: false
    });
    const page = await browser.newPage();
    // 给异步方法添加await
    await page.setUserAgent(
        "Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"
    );
    const cookies = [
    {
        name: '__Secure-3PSIDCC',
        value: 'hello',
        domain: '.google.com',
        secure: true, // 满足__Secure-前缀的HTTPS要求
        url: 'https://google.com' // 显式指定Cookie所属的HTTPS地址
    }
    ];
    await page.setCookie(...cookies);
    await page.goto("https://google.com");
    // 将setTimeout包装为Promise,确保异步流程正确
    await new Promise(resolve => setTimeout(async() =>{
        const link = await page.evaluate(() => document.querySelector('*').outerHTML);
        await page.mouse.click(782, 354);
        await new Promise(resolveInner => setTimeout(async() =>{
            await page.bringToFront();
            await page.mouse.click(782, 354);
            resolveInner();
        }, 10));
        resolve();
    }, 10000));
});
f();

内容的提问来源于stack exchange,提问作者Sworddefence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:20:28