在 Puppeteer 中如何将 Chrome 窗口从默认配置文件切换到所需的配置文件

2024-05-10

我的要求是在新的配置文件上测试 chrome 扩展。

我提到https://peter.sh/experiments/chromium-command-line-switches/ https://peter.sh/experiments/chromium-command-line-switches/对于 Chromium args[--user-data-dir, --profile-directory]

浏览器启动后,会打开 2 个 chrome 窗口。一个具有给定的配置文件和扩展名,另一个具有默认配置文件和给定的扩展名。焦点还集中在具有默认配置文件的窗口上。所以所有的动作都发生在它上面。

我原以为只会打开 1 个浏览器窗口并显示所需的配置文件和扩展名。

我尝试将焦点切换到所需的窗口,但 browser.BrowserContexts().length 为 1,这是具有默认配置文件的浏览器。 browser.targets() 还显示只有 1 个类型为浏览器的目标。

我的环境:
1.傀儡师版本:6.9.0
2.平台/操作系统版本:Windows 10 Pro版本1803
3. URL(如果适用):
4.Node.js版本:10.16.3

我尝试过的:
A。从 path\to\my\project\node_modules\puppeteer.local-chromium\win64-674921\chrome-win\chrome.exe 打开 chrome.exe
b.单击个人资料图标并打开“管理人员”对话框。
C。添加新人(个人资料)
d.打开 chrome://version 并记下配置文件路径并关闭浏览器。
e.创建example1.js、example2.js并使用node example1.js、node example2.js执行。下面给出了两个示例的代码。

示例1.js

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless:false, args:['--disable-extensions-except=\\path\\to\\my\\extension',
'--load-extension=\\path\\to\\my\\extension',
'--user-data-dir=%userprofile%\\AppData\\Local\\Chromium\\User Data',
'--profile-directory=Profile 1'
]});

  const page = await browser.newPage();
  await page.waitFor(5000);
  await browser.close();
})();

示例2.js

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless:false, args:['--disable-extensions-except=c:\\dev\\prj\\vpnteam\\global VPN\\extension', 
                                                                '--load-extension=c:\\dev\\prj\\vpnteam\\global VPN\\extension',
                                                                '--user-data-dir=c:\\Users\\govinda.s\\AppData\\Local\\Chromium\\User Data',
                                                                '--profile-directory=Profile 1'
                                                            ]});
  console.log(browser.browserContexts().length);
  var x = await browser.targets();
  for(let i=0;i<x.length;i++)
  {
    if(x[i].type()==='browser')
    {
        console.log(x[i]['_targetInfo']['targetId']);
    }
  }
  await browser.close();
})();

我原以为 Puppeteer 应该启动 Chrome 并给出:
A。轮廓
b.应该为该配置文件加载给定的扩展。

然而,除了上述预期之外,
A。还启动了具有默认配置文件的浏览器。总共打开 2 个浏览器窗口。
b.具有默认配置文件的浏览器还加载了给定的扩展。
C。默认情况下,具有默认配置文件的浏览器具有焦点。
d. browser.browserContexts().length 为 1
e.只有 1 个目标类型为浏览器


好吧,我找到原因了。

但首先我想补充一点,问题不在于木偶师。问题是 chrome 标志如何--user-data-dir工作和我期望的工作方式。

我的理解是 arg--user-data-dir指定更改用户数据的默认目录。 Chromium 搜索用户数据的默认目录是%userprofile%\AppData\Local\Chromium\User Data但是当arg--user-data-dir使用后会将 '\Default' 附加到特定目录。所以就变成了%userprofile%\AppData\Local\Chromium\User Data\Default相反,它是一个配置文件目录。

因此不需要 arg--profile-directory。但既然我已经使用了它,我也指示 chromium 考虑使用特定的配置文件。

这里肯定存在一些参数冲突,导致打开两个浏览器。一个具有指定配置文件,另一个具有默认配置文件。

所以我所做的是:

  1. 我移动了目录的内容%userprofile%\AppData\Local\Chromium\User Data\Profile 1 to %userprofile%\AppData\Local\Chromium\User Data\Profile 1\Default。我在 Profile 1 目录中创建了“默认”目录。

  2. 删除了参数--profile-directory并设置--user-data-dir=%userprofile%\AppData\Local\Chromium\User Data\Profile 1.

现在,Chromium 所做的是将其更改为%userprofile%\AppData\Local\Chromium\User Data\Profile 1\Default。这样我就可以使用 puppeteer 使用所需的配置文件启动。

最终代码:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless:false, args:['--disable-extensions-except=/path/to/my/extension',
                                                                '--load-extension=/path/to/my/extension',
                                                                '--user-data-dir=%userprofile%\\AppData\\Local\\Chromium\\User Data\\Profile 1'
                                                                //'--profile-directory=Profile 1'
                                                            ]});
  const page = await browser.newPage();
  await page.goto("http://www.google.com");
  await page.waitFor(5000)
  await browser.close();
})();

谢谢阅读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Puppeteer 中如何将 Chrome 窗口从默认配置文件切换到所需的配置文件 的相关文章

随机推荐