Puppeteer获得第三方cookie

Pio*_*cik 4 javascript cookies google-chrome-headless puppeteer

如何使用木偶戏从网站获取第三方cookie?

对于第一方我知道我可以使用 await page.cookies()

Vav*_*off 15

我有兴趣知道答案,所以也找到了解决方案,它适用于当前版本的Chrome 68.0.3419.0和Puppeteer v1.4.0.

使用内部木偶操作 page._client方法,我们可以直接使用Chrome DevTools协议:

(async() => {
  const browser = await puppeteer.launch({});
  const page = await browser.newPage();
  await page.goto('https://stackoverflow.com', {waitUntil : 'networkidle2' });

  // Here we can get all of the cookies
  console.log(await page._client.send('Network.getAllCookies'));

})();
Run Code Online (Sandbox Code Playgroud)

在返回的对象中有google.com和imgur.com的cookie,这是我们用普通浏览器javascript无法获得的:

三方饼干!


Gra*_*ler 8

您可以创建一个Chrome的DevTools协议会话页面目标使用target.createCDPSession()。然后您可以发送Network.getAllCookies以获取所有浏览器 cookie 的列表。

page.cookies()函数将只返回当前 URL 的 cookie。因此,我们可以从所有浏览器 cookie 中过滤掉当前页面 cookie,以仅获取第三方 cookie 列表。

const client = await page.target().createCDPSession();
const all_browser_cookies = (await client.send('Network.getAllCookies')).cookies;
const current_url_cookies = await page.cookies();
const third_party_cookies = all_browser_cookies.filter(cookie => cookie.domain !== current_url_cookies[0].domain);

console.log(all_browser_cookies); // All Browser Cookies
console.log(current_url_cookies); // Current URL Cookies
console.log(third_party_cookies); // Third-Party Cookies
Run Code Online (Sandbox Code Playgroud)