在 Puppeteer 中如何从默认配置文件切换到 chrome window 到所需的配置文件
In Puppeteer how to switch to chrome window from default profile to desired profile
我的要求是在新配置文件上测试 chrome 扩展。
我为 Chromium args[--user-data-dir, --profile-directory]
引用了 https://peter.sh/experiments/chromium-command-line-switches/
浏览器启动后,打开2 chrome windows。一个具有给定的配置文件和扩展名,另一个具有默认配置文件和给定的扩展名。此外,焦点在具有默认配置文件的 window 上。所以所有的动作都在它上面发生。
我曾预计只有 1 个浏览器 window 会使用所需的配置文件和扩展名打开。
我试图将焦点切换到所需的 window 但 browser.BrowserContexts().length 为 1,这是具有默认配置文件的浏览器。另外 browser.targets() 显示只有 1 个目标类型为浏览器。
我的环境:
1。人偶版本:6.9.0
2。平台 / OS 版本:Windows 10 Pro 版本 1803
3。网址(如果适用):
4。 Node.js版本:10.16.3
我尝试了什么:
一个。从 path\to\my\project\node_modules\puppeteer.local-chromium\win64-674921\chrome-win\chrome.exe 打开 chrome.exe
b。单击配置文件图标并打开“管理人员”对话框。
c。添加新人(个人资料)
d。打开 chrome://version 并记下 Profile Path 并关闭浏览器。
e。创建example1.js、example2.js并使用节点example1.js、节点example2.js执行。下面给出了两个示例的代码。
example1.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();
})();
example2.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 给定:
一个。轮廓
b。应该为该配置文件加载给定的扩展名。
然而,除了超出预期之外,
一个。还启动了具有默认配置文件的浏览器。总共打开了 2 个浏览器 windows。
b。具有默认配置文件的浏览器也已加载给定的扩展名。
c。默认情况下,具有默认配置文件的浏览器具有焦点。
d。 browser.browserContexts().length 为 1
e。只有 1 个目标类型为 browser
好的,找到原因了
但首先我想补充一点,问题不在 puppeteer 中。问题是 chromium flag --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考虑使用specific profile
这里肯定存在一些参数冲突,导致打开了 2 个浏览器。一个具有指定的配置文件,另一个具有默认配置文件。
所以我做的是:
我将目录 %userprofile%\AppData\Local\Chromium\User Data\Profile 1
的内容移到了 %userprofile%\AppData\Local\Chromium\User Data\Profile 1\Default
。我在配置文件 1 目录中创建了 'Default' 目录。
删除了 arg --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();
})();
感谢阅读。
我们需要使用 puppeteer-core 来利用现有的 chrome/edge 等。我在我的 windows10.
中发现了以下工作
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
headless: false,
executablePath: 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
args: [
'--user-data-dir=%userprofile%\AppData\Local\Chrome\User Data',
'--profile-directory=Profile 8'
]
});
})();
我的要求是在新配置文件上测试 chrome 扩展。
我为 Chromium args[--user-data-dir, --profile-directory]
引用了 https://peter.sh/experiments/chromium-command-line-switches/浏览器启动后,打开2 chrome windows。一个具有给定的配置文件和扩展名,另一个具有默认配置文件和给定的扩展名。此外,焦点在具有默认配置文件的 window 上。所以所有的动作都在它上面发生。
我曾预计只有 1 个浏览器 window 会使用所需的配置文件和扩展名打开。
我试图将焦点切换到所需的 window 但 browser.BrowserContexts().length 为 1,这是具有默认配置文件的浏览器。另外 browser.targets() 显示只有 1 个目标类型为浏览器。
我的环境:
1。人偶版本:6.9.0
2。平台 / OS 版本:Windows 10 Pro 版本 1803
3。网址(如果适用):
4。 Node.js版本:10.16.3
我尝试了什么:
一个。从 path\to\my\project\node_modules\puppeteer.local-chromium\win64-674921\chrome-win\chrome.exe 打开 chrome.exe
b。单击配置文件图标并打开“管理人员”对话框。
c。添加新人(个人资料)
d。打开 chrome://version 并记下 Profile Path 并关闭浏览器。
e。创建example1.js、example2.js并使用节点example1.js、节点example2.js执行。下面给出了两个示例的代码。
example1.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();
})();
example2.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 给定:
一个。轮廓
b。应该为该配置文件加载给定的扩展名。
然而,除了超出预期之外,
一个。还启动了具有默认配置文件的浏览器。总共打开了 2 个浏览器 windows。
b。具有默认配置文件的浏览器也已加载给定的扩展名。
c。默认情况下,具有默认配置文件的浏览器具有焦点。
d。 browser.browserContexts().length 为 1
e。只有 1 个目标类型为 browser
好的,找到原因了
但首先我想补充一点,问题不在 puppeteer 中。问题是 chromium flag --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考虑使用specific profile
这里肯定存在一些参数冲突,导致打开了 2 个浏览器。一个具有指定的配置文件,另一个具有默认配置文件。
所以我做的是:
我将目录
%userprofile%\AppData\Local\Chromium\User Data\Profile 1
的内容移到了%userprofile%\AppData\Local\Chromium\User Data\Profile 1\Default
。我在配置文件 1 目录中创建了 'Default' 目录。删除了 arg
--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();
})();
感谢阅读。
我们需要使用 puppeteer-core 来利用现有的 chrome/edge 等。我在我的 windows10.
中发现了以下工作const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
headless: false,
executablePath: 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
args: [
'--user-data-dir=%userprofile%\AppData\Local\Chrome\User Data',
'--profile-directory=Profile 8'
]
});
})();