Mac下使用默认浏览器启动Puppeteer报错求助
Mac下Puppeteer启动Chrome后打开新页面报错的解决方案
核心问题及修复步骤:
- page变量未定义:代码里只启动了browser实例,但没创建或获取page对象就直接调用
page.goto(),这是报错的直接原因,必须先创建页面实例再操作。 - 默认配置目录冲突:如果本地Chrome正在运行,Puppeteer无法复用同一个用户数据目录,会触发资源占用冲突。建议先关闭本地Chrome,或者复制一份默认配置目录单独给Puppeteer使用。
- 权限问题:Mac系统下访问
~/Library/Application Support/Google/Chrome可能存在权限限制,要确保Node进程有该目录的读写权限。
修正后的完整代码:
const puppeteer = require('puppeteer'); const path = require('path'); async function launchBrowser() { // 可选:复制默认配置目录到新路径,避免与本地Chrome冲突 // const userDataDir = path.join(process.env.HOME, 'Library/Application Support/Google/Chrome_Puppeteer'); const userDataDir = path.join( process.env.HOME, 'Library/Application Support/Google/Chrome' ); try { const browser = await puppeteer.launch({ headless: false, executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', userDataDir: userDataDir, args: [ '--start-maximized', '--no-sandbox', '--disable-setuid-sandbox', '--profile-directory=Default', '--no-first-run', ], defaultViewport: null, ignoreDefaultArgs: ['--enable-automation'], }); // 新增:创建page实例 const page = await browser.newPage(); await page.goto("https://www.google.com/"); // 后续操作代码可添加在此处 } catch (error) { console.error('启动错误:', error); console.error('Chrome路径:', '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'); console.error('用户数据目录:', userDataDir); throw error; } } launchBrowser()
额外建议:
- 测试前优先关闭本地运行的Chrome,避免配置目录冲突。
- 若不想关闭本地Chrome,复制默认配置目录到新路径(如代码注释示例),修改
userDataDir指向新路径,让Puppeteer使用独立配置,不影响本地Chrome。
内容的提问来源于stack exchange,提问作者Wiil Waal
相关产品推荐
相关产品推荐

