Google chrome devtools 木偶演员';s page.cookies()未检索Chrome开发工具中显示的所有cookies

Google chrome devtools 木偶演员';s page.cookies()未检索Chrome开发工具中显示的所有cookies,google-chrome-devtools,puppeteer,Google Chrome Devtools,Puppeteer,使用Puppeter,我试图检索特定网站的所有cookie(即https://google.com)从Node.js 我的代码是: // Launch browser and open a new page const browser = await puppeteer.launch({ headless: true, args: ['--disable-dev-shm-usage'] }); const page = await browser.newPage(); await page.go

使用Puppeter,我试图检索特定网站的所有cookie(即
https://google.com
)从Node.js

我的代码是:

// Launch browser and open a new page
const browser = await puppeteer.launch({ headless: true, args: ['--disable-dev-shm-usage'] });
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle2' });
var cookies = await page.cookies();
console.log(cookies);
await browser.close();
它只检索两个cookie,分别命名为
1P\u JAR
NID
。然而,当我打开Chrome开发工具时,它显示了更多

我试着直接使用Chrome开发工具而不是木偶师,但我得到了同样的结果


还有其他我应该调用的函数吗?我做得对吗?

谢谢@try catch finally。我解决了这个问题,这是一个简单的新手错误。 我将我自己的谷歌浏览器实例中的cookies与Puppeter实例中的cookies进行了比较。然而,在我的例子中,我登录到了我的谷歌帐户,而木偶演员(显然)没有。 Google在您未登录时使用2个cookie,在您登录时使用12个cookie。

页面。cookies()调用仅获取浏览器中JavaScript应用程序可用的cookies,而不是您在Chrome开发工具中看到的标记为
httpOnly
的cookies。解决方案是通过Devtools协议请求所有可用的cookie,然后筛选您感兴趣的站点

var data = await page._client.send('Network.getAllCookies');

如果您使用剧作家代替木偶演员,则可以轻松访问httponly cookies:

const { chromium } = require('playwright')
(async () => {
    const browser = await chromium.launch()
    const context = await browser.newContext()
    const page = await context.newPage()
    await page.goto('https://google.com', { waitUntil: 'networkidle' })
    let allCookies = await context.cookies()
    console.log (allCookies)
})();
返回:

[
  {
    sameSite: 'None',
    name: '1P_JAR',
    value: '2021-01-27-19',
    domain: '.google.com',
    path: '/',
    expires: 1614369040.389115,
    httpOnly: false,
    secure: true
  },
  {
    sameSite: 'None',
    name: 'NID',
    value: '208=VXtmbaUL...',
    domain: '.google.com',
    path: '/',
    expires: 1627588239.572781,
    httpOnly: true,
    secure: false
  }
]

请在开发工具中添加打开cookie的“应用程序”面板的屏幕截图(将cookie值像素化)。在尝试以编程方式获取cookie之前,请确保已完成所有异步任务的页面加载。文档中说“如果没有指定URL,此方法将返回当前页面URL的cookies。”-这可能会排除为“www.google.com”或“.google.com”(关于您的页面URL“google.com”)设置的cookies。我发现Puppeter中也存在这种行为