Skip to content

Instantly share code, notes, and snippets.

@Ariex
Created January 23, 2018 01:09
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Ariex/6f425fbcab09e13d8bec39aba7c4a9b5 to your computer and use it in GitHub Desktop.
Save Ariex/6f425fbcab09e13d8bec39aba7c4a9b5 to your computer and use it in GitHub Desktop.
const Page = require('puppeteer/lib/Page');
// the following 2 methods are originally from: https://github.com/GoogleChrome/puppeteer/issues/85#issuecomment-341743259, with some modification to fit puppeteerv1.0.0
async function newPageWithNewContext(browser) {
const { browserContextId } = await browser._connection.send('Target.createBrowserContext');
const { targetId } = await browser._connection.send('Target.createTarget', { url: 'about:blank', browserContextId });
const target = await browser._targets.get(targetId);
const client = await browser._connection.createSession(targetId);
const page = await Page.create(client, target, browser._ignoreHTTPSErrors, browser._appMode, browser._screenshotTaskQueue);
page.browserContextId = browserContextId;
return page;
}
async function closePage(browser, page) {
if (page.browserContextId != undefined) {
await browser._connection.send('Target.disposeBrowserContext', { browserContextId: page.browserContextId });
}
await page.close();
}
module.exports = {
beginIncognito: async browser => {
let page = await newPageWithNewContext(browser);
page.endIncognito = async() => closePage(browser, page);
return page;
}
};
@Ariex
Copy link
Author

Ariex commented Jan 31, 2018

a test case. https://www.microsoft.com/en-au/ will create a cookie MUID for new visitors. So if incognito works, it should output 2 different MUID.

const puppeteer = require('puppeteer');
const { beginIncognito } = require('./incognito-page');

(async function () {
    let browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] });
    let page;
    let response;
    let cookies;

    console.group("normal page");
    page = await browser.newPage();
    response = await page.goto('https://www.microsoft.com/en-au/'); // no cookies
    cookies = await page._client.send('Network.getAllCookies');
    console.log(`MUID value: ${cookies.cookies.find(c => c.name === "MUID").value}`);
    await page.close();

    page = await browser.newPage();
    response = await page.goto('https://www.microsoft.com/en-au/'); // no cookies
    cookies = await page._client.send('Network.getAllCookies');
    console.log(`MUID value: ${cookies.cookies.find(c => c.name === "MUID").value}`);
    await page.close();
    console.groupEnd("normal page");

    console.group("incognito page");
    page = await beginIncognito(browser);
    response = await page.goto('https://www.microsoft.com/en-au/'); // no cookies
    cookies = await page._client.send('Network.getAllCookies');
    console.log(`MUID value: ${cookies.cookies.find(c => c.name === "MUID").value}`);
    await page.endIncognito();

    page = await beginIncognito(browser);
    response = await page.goto('https://www.microsoft.com/en-au/'); // no cookies
    cookies = await page._client.send('Network.getAllCookies');
    console.log(`MUID value: ${cookies.cookies.find(c => c.name === "MUID").value}`);
    await page.endIncognito();
    console.groupEnd("incognito page");

    await browser.close();
})();

i got

normal page
  MUID value: 3347AF96346960ED388AA41E35A8613A
  MUID value: 3347AF96346960ED388AA41E35A8613A
incognito page
  MUID value: 101010305942687F04641BB8588369BF
  MUID value: 112E31F4A1F56467240F3A7CA0346516

@samjmck
Copy link

samjmck commented Feb 19, 2018

Thanks for this. However, I've noticed that the _targets property isn't set in the browser object – at least not in the version from npm.

@Raidus
Copy link

Raidus commented Mar 20, 2018

Thanks for the example. It seems that microsoft has changed their cookie names. MS0 has to be checked instead of MUID in my case.

@Ariex
Copy link
Author

Ariex commented Jul 3, 2018

official API available since v1.5.0: browser.createIncognitoBrowserContext()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment