Puppeteer:启动 Chromium 并启用“保留日志”

the*_*ton 9 chromium google-chrome-devtools puppeteer

DevTools 中有一个方便的功能,您可以保留日志(因此它不会在页面重新加载/导航时清除控制台或网络选项卡等的内容)。

在此输入图像描述

目前,如果我不想错过任何事情,在调试过程中我的手需要像闪电一样快地单击复选框。我已经在peter.sh上寻找相应的 chrome 启动标志,但没有运气。

有没有办法在启用此功能的情况下启动 chromium?可以用 puppeteer 来应用吗?

到目前为止我的设置是:

const browser = await puppeteer.launch({ headless: false, devtools: true })
Run Code Online (Sandbox Code Playgroud)

编辑

感谢 @wOxxOm 的评论,我能够启用它,但该解决方案需要项目的三个额外依赖项:puppeteer-extrapuppeteer-extra-plugin-user-preferencespuppeteer-extra-plugin-user-data-dir

我对没有额外依赖项的解决方案感兴趣,仅在木偶操作者中。

user-preferences例子:

const puppeteer = require('puppeteer-extra')
const ppUserPrefs = require('puppeteer-extra-plugin-user-preferences')

puppeteer.use(
  ppUserPrefs({
    userPrefs: {
      devtools: {
        preferences: {
          'network_log.preserve-log': '"true"'
        }
      }
    }
  })
)
Run Code Online (Sandbox Code Playgroud)

cus*_*der 5

我在没有任何额外软件包的情况下取得了一些成功:

  1. 启动和关闭浏览器实例的唯一目的是生成新的用户数据目录。理想情况下,您已经提供了自己的路径。
  2. 找到该Preferences文件(它是一个 JSON 文件),读取它并写入devtools.preferences.
  3. 重新启动浏览器(使用步骤 1 中创建的用户数据目录)

下面是一些可以帮助您入门的代码:

我使用了官方puppeteer-core软件包,这样我就可以使用本地安装的 Chrome,这就是我提供该executablePath选项的原因。如果您使用完整的软件包,则不需要这个puppeteer

const pp = require('puppeteer-core');
const fs = require("fs");

const run = async () => {
  const opts = { executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
               , devtools: true
               , userDataDir: "/tmp/pp-udd"
               , args: ["--auto-open-devtools-for-tabs"]
               };

  // open & close to create the user data directory
  let browser = await pp.launch(opts);
  await browser.close();

  // read & write Preferences
  const prefs = JSON.parse(fs.readFileSync("/tmp/pp-udd/Default/Preferences"));
  prefs.devtools.preferences['network_log.preserve-log'] = '"true"';
  fs.writeFileSync("/tmp/pp-udd/Default/Preferences", JSON.stringify(prefs));

  // relaunch with our own Preferences from our own user data directory
  browser = await pp.launch(opts);
  let page = await browser.newPage();
  await page.goto("https://stackoverflow.com/q/63661366/1244884");
};

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

这是一个截屏视频:

  1. 第一次启动是步骤1的“启动&关闭”
  2. 然后是第二次启动,解决这个问题;)打开 DevTools,并从一开始就选中“保留日志”选项。

在此输入图像描述