google-chrome-devtools - Puppeteer:在启​​用 "Preserve log"的情况下启动 Chromium

标签 google-chrome-devtools puppeteer chromium

DevTools 中有这个方便的功能,您可以使用 保留日志 (因此它不会清除页面重新加载/导航上的控制台内容或网络选项卡等)。
enter image description here
目前,如果我不想错过任何事情,我的手需要像闪电一样快才能在调试期间单击复选框。我已经在 peter.sh 上寻找了相应的 chrome 启动标志没有运气。
有没有办法在启用此功能的情况下启动 Chrome ?可以和puppeteer一起使用吗?
到目前为止,我的设置是:

const browser = await puppeteer.launch({ headless: false, devtools: true })

编辑
感谢@wOxxOm 的评论,我能够启用它,但该解决方案需要对项目的三个附加依赖项:puppeteer-extra , puppeteer-extra-plugin-user-preferencespuppeteer-extra-plugin-user-data-dir .
我会对一个没有额外依赖的解决方案感兴趣,只在 puppeteer 中。 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"'
        }
      }
    }
  })
)

最佳答案

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

  • 启动并关闭浏览器实例,其唯一目的是生成新的用户数据目录。理想情况下,您已经提供了自己的路径。
  • 找到 Preferences文件(它是一个 JSON 文件),读取它并写入 devtools.preferences .
  • 重新启动浏览器(使用在步骤 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();
    
    这是一个截屏:
  • 第一次启动是第一步的“启动&关闭”
  • 然后是针对这个问题的第二次启动;) 打开 DevTools,从一开始就选中“保留日志”选项。

  • enter image description here

    关于google-chrome-devtools - Puppeteer:在启​​用 "Preserve log"的情况下启动 Chromium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63661366/

    相关文章:

    javascript - 为什么在 Linux 上运行简单的 puppeteer 脚本时会出现 "Browser is not downloaded"错误?

    javascript - 使用 Puppeteer 在网站中查找最大的图像

    javascript - 如何与 Puppeteer/Javascript 同时运行脚本?

    docker - Docker 中的 Chromium 抛出 "Failed to create shared context for virtualization"

    javascript - 在 devtool 中启用跨源 XMLHttpRequest

    html - 如何将 CSS 复制到 Chrome 中的另一个选项卡?

    winapi - 嵌入 win32 程序的 Web 浏览器引擎

    Electron 框架和隐私

    html - 在 HTML 中包围整个主体的元素的属性

    javascript - Chrome网络检查器: Is it possible to find the calls for a specific DOM element?