首页 > 解决方案 > Puppeteer:如何将默认浏览器上下文设置为隐身模式?

问题描述

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

但是,我遇到的问题是,即使我传入了--incognito启动浏览器的标志,默认浏览器上下文也认为它不是隐身模式。为了解决这个问题,我尝试了两种解决方法,在代码中用“Workaround 1”和“Workaround 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 浏览器实例是隐身的

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

标签: puppeteer

解决方案


更新:

你可以尝试这样的事情,它会在隐身模式下启动一个铬实例。

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();

或者,您可以在启动浏览器后使用以下命令创建新的隐身浏览器上下文browser.createIncognitoBrowserContext()

const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext();

或者

const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

推荐阅读