如何使用已有的配置文件多次启动 puppeteer

DUM*_*SER 5 javascript automation google-chrome node.js puppeteer

所以我尝试使用已经存在的 chrome 配置文件启动 puppeteer 并且它可以工作,但我想做的是多次启动相同的进程,这会引发错误

(节点:12820)UnhandledPromiseRejectionWarning:错误:无法启动浏览器进程![0311/152606.490:ERROR:chrome_main_delegate.cc(679)] 仅当“--user-data-dir”也指定为非默认值时,才能禁用 Web 安全

我这样做:

 const browser = await puppeteer.launch({
    executablePath: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
    headless: false,
    // excludeSwitches: 'enable-automation',
    args: [

      '--user-data-dir=C:\\Users\\USER\\AppData\\Local\\Google\\Chrome\\User Data'
    ],
  });
Run Code Online (Sandbox Code Playgroud)

jcb*_*drn 4

据我所知,Puppeteer 不允许为同一 userDataDir 多次启动自己,因为该文件夹包含一个缓存文件夹,每个 puppeteer 实例必须是唯一的。但是,您可以使用同一浏览器实例打开多个页面。例如:

   const browser = await puppeteer.launch({
      executablePath: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
      headless: false,
      // excludeSwitches: 'enable-automation',
      args: [
         '--user-data-dir=C:\\Users\\USER\\AppData\\Local\\Google\\Chrome\\User Data'
      ],
   });
   const page1 = await browser.newPage();
   const page2 = await browser.newPage();
   await page1.goto("https://www.bbc.co.uk", {waitUntil: 'networkidle2'});
   await page2.goto("https://www.google.co.uk", {waitUntil: 'networkidle2'});
Run Code Online (Sandbox Code Playgroud)

如果您确实需要完全隔离的 Puppeteer 进程,则需要使用其自己唯一的 userDataDir 启动每个进程。您可以尝试仅使用您需要的配置文件构建一个轻量级配置文件,并为您启动的每个进程制作一个副本。

抱歉,这并不是一个完美的解决方案,但我认为您想要做的事情是不可能的。