木偶:如何将默认浏览器上下文设置为隐身?

时间:2019-08-06 12:52:10

标签: puppeteer

我正在尝试使用以下代码以隐身模式启动Chrome浏览器。当我创建新页面并导航到URL时,我希望有一个Chrome浏览器实例,并且希望隐身该单个Chrome浏览器实例。

但是,我遇到的问题是,即使我传递了--incognito标志来启动浏览器,默认的浏览器上下文也认为它不是隐身的。若要尝试解决此问题,我尝试了两种解决方法,在代码中分别用“解决方法1”和“解决方法2”表示。这两种方法都无法完成上述段落的粗体字。

import { Page, Browser } from "puppeteer";

const puppeteer = require('puppeteer');

async function run() {
    const browser: Browser = await puppeteer.launch({
        headless: false,
        defaultViewport: null,
        args: [ '--incognito' ], // Passing in the flag here
    });

    // Shockingly, the below logs FALSE!
    console.log(browser.defaultBrowserContext().isIncognito());

    // Workaround 1: This creates a new page in non-incognito mode, but I would like the new page to be in incognito mode.
    const browserPage: Page = await browser.newPage();
    browserPage.goto("https://www.google.com");

    // Workaround 2: This creates a new page in incognito mode, but I would like only one instance of the Chrome browser instead of two.
    const context = await browser.createIncognitoBrowserContext();
    const newContextPage: Page = await context.newPage();
    newContextPage.goto("https://www.amazon.com");
}

run();

因此,我如何同时完成这两项?

  1. 启动了一个Chrome浏览器实例
  2. 该单个Chrome浏览器实例是隐身的

我认为答案是将默认浏览器上下文设置为隐身,但是我该怎么做?

2 个答案:

答案 0 :(得分:1)

根据此issue,这是不可能的。

答案 1 :(得分:1)

您可以尝试类似的操作,它将以隐身模式启动一个Chrome实例。

async function run() {
  const browser: Browser = await puppeteer.launch({
    headless: false,
    defaultViewport: null,
    args: [ '--incognito' ], // Passing in the flag here
  });

  const [ browserPage ] = await browser.pages();
  await browserPage.goto("https://www.google.com");
}

run();