【问题标题】:Passing multiple cookies to puppeteer将多个 cookie 传递给 puppeteer
【发布时间】:2018-11-08 03:12:15
【问题描述】:

按照用户 Md. Abu Taher 的建议,我使用了一个名为 EditThisCookie 的插件从我的浏览器下载 cookie。

导出的cookies是JSON格式的,实际上是一个对象数组。

是否可以将此数组作为参数传递给 puppeteer?我可以将对象数组传递给 page.setCookies() 函数吗?

【问题讨论】:

  • 只有page.setCookie 方法允许一次只设置一个cookie。
  • 但它包含一个休息和传播运算符,所以我认为你可以传递一个 cookie 数组。
  • 很公平,我的错。 Looking at the code 它确实可以接受一个对象数组。所以我猜你只需要确保你保存的cookie符合Chrome cookie specs
  • 如果我要传递的 cookie 不符合这些规范怎么办?我发现一些 cookie 具有规范中没有的属性,例如(domain、hostOnly、session、storeId、id)。同样Site 是“no_restriction”,而 puppeteer 想要“Strict”或“Lax”。

标签: json node.js cookies puppeteer


【解决方案1】:

您可以使用spread syntax await page.setCookie(...cookies);,其中cookies 是一个cookie 对象数组。 https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetcookiecookies

试试https://try-puppeteer.appspot.com/

const browser = await puppeteer.launch();
const url = 'https://example.com';
const page = await browser.newPage();
await page.goto(url);

const cookies = [{
  'name': 'cookie1',
  'value': 'val1'
},{
  'name': 'cookie2',
  'value': 'val2'
},{
  'name': 'cookie3',
  'value': 'val3'
}];

await page.setCookie(...cookies);
const cookiesSet = await page.cookies(url);
console.log(JSON.stringify(cookiesSet));
await browser.close();

【讨论】:

  • 你在try-puppeteer.appspot.com上试过了吗? async 已经提供了带有 puppeteer 的包装器。
  • 另外,page.cookies() 用于从特定的url 读取 cookie,github.com/GoogleChrome/puppeteer/blob/master/docs/…page.setCookie(...cookies) 用于设置 cookie。
  • @lima_fil 您需要在数组中添加域或 ULR 值才能使您的答案起作用: const cookies = [{ name: 'cookie1', value: 'val1', domain: '.domain1 ' },{ 名称:'cookie2',值:'val2',域:'.domain2' },{ 名称:'cookie3',值:'val3',域:'.domain3' }];
【解决方案2】:

您可以使用扩展运算符调用page.setCookie() 来一次设置多个cookie。

但是,请确保您在调用page.goto(url) 之前调用它,因为如果您之后调用它,cookie 将在页面加载后设置。

page.goto(url) 之前调用page.setCookie() 将要求您为每个cookie 添加一个domain 键。

const cookies = [
  {name: 'cookie1', value: 'val1', domain: 'example.com'},
  {name: 'cookie2', value: 'val2', domain: 'example.com'},
  {name: 'cookie3', value: 'val3', domain: 'example.com'},
];

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setCookie(...cookies);
await page.goto('https://example.com');
await browser.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2018-11-12
    • 2016-03-01
    • 2016-04-12
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多