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
相关产品推荐
相关产品推荐

