如何将userDataDir配置文件夹传递给Puppeteer

12

我希望能够将自定义配置文件传递给Puppeteer。首先,我尝试传递我的真实Google Chrome配置文件:

const browser = await puppeteer.launch({
  userDataDir: '/Users/[USERNAME]/Library/Application Support/Google/Chrome/Default',
  headless: false,
  slowMo: 250,
  ...
}

但是当浏览器打开后,如果我进入设置,它显示的是Person 1而不是来自我的Google Chrome个人资料的数据。

上面的userDataDir路径是在我访问chrome://version时,Google Chrome中显示的Profile Path(其中[USERDATA]是我的用户名)。

我还尝试了userDataDir: '~/Library/Application Support/Google/Chrome/Default'

我使用的是
Puppeteer 0.11.0
Node 8.4.0
NPM 5.2.0
macOS El Capitan 10.11.6
MacBook Pro Retina,15英寸,2015年中期

3个回答

17

使用相对路径可以正常工作。该路径是相对于执行包含使用puppeteer的javascript的cli命令的文件夹而言的:

await puppeteer.launch({
  userDataDir: './myUserDataDir',
})

我尝试了这个解决方案,但是它给出了以下错误: [9665:775:0117/220533.630257:ERROR:browser_dm_token_storage_mac.mm(153)] 检索机器序列号时出错。 - ifelse.codes
2
这不起作用!它仍然创建新的临时配置文件。 - Code Cooker
1
尝试使用path.resolve(__dirname, './myUserDataDir')进行操作。 - Giorgio
我仍然无法让它工作。原来我继承的代码包括发送给puppeteer的默认参数。这些默认参数已经在指向临时文件夹的默认用户数据目录中,因此Chrome即使我指定了不同的目录,仍然使用临时目录。我无法改变默认设置,所以我找到的解决方法是直接使用userDataDir与puppeteer.launch一起使用,这将优先于参数。使用chrome://version非常有用,可以调试正在使用哪个配置文件目录。 - Adam

1
也许有点晚了,但是有一个简单的解决办法:你需要使用反引号引用,因为“Application Support”中包含了一个空格。
const browser = await puppeteer.launch({
  userDataDir: `/Users/[USERNAME]/Library/'Application Support'/Google/Chrome/Default`,
  headless: false,
  slowMo: 250,
  ...
}

上面的代码会起作用。

0
await puppeteer.launch({
  userDataDir: 'myUserDataDir',
})

试着使用这个,它会自动创建一个目录。

3
你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接