Laravel调用Puppeteer遇Chrome未找到错误,已安装仍报错求解决
问题描述
我有一个使用Puppeteer的NodeJS脚本,由PHP框架Laravel启动。本地环境运行正常,因Laravel以当前用户账户执行,脚本也沿用该账户。但服务器上Laravel以Apache账户(www-data)运行,JS脚本同样以此账户执行。当脚本调用Puppeteer时出现如下错误:
Error: Could not find Chrome (ver. 130.0.6723.58). This can occur if either 1. you did not perform an installation before running the script (e.g. `npx puppeteer browsers install chrome`) or 2. your cache path is incorrectly configured (which is: /var/www/.cache/puppeteer). For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration. at ChromeLauncher.resolveExecutablePath (file:///home/admin/node-twitterbot/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserLauncher.js:266:27) at ChromeLauncher.executablePath (file:///home/admin/node-twitterbot/node_modules/puppeteer-core/lib/esm/puppeteer/node/ChromeLauncher.js:202:25) at ChromeLauncher.computeLaunchArguments (file:///home/admin/node-twitterbot/node_modules/puppeteer-core/lib/esm/puppeteer/node/ChromeLauncher.js:83:37)
我已执行命令:
sudo -u www-data npx puppeteer browsers install chrome chromium -- path=/var/www/.cache/puppeteer
且/var/www/.cache/puppeteer文件夹中已存在Chrome和Chromium,但仍抛出该异常,求解决思路。
解决思路
- 检查文件权限:确保
/var/www/.cache/puppeteer及其子文件、文件夹对www-data账户有完整的读、执行权限。执行以下命令:sudo chown -R www-data:www-data /var/www/.cache/puppeteer sudo chmod -R 755 /var/www/.cache/puppeteer - 直接指定Chrome可执行路径:在Puppeteer启动代码中明确指定已安装的Chrome路径,绕过自动查找逻辑。示例代码:
注意替换路径中的具体版本号为你实际安装的版本。const puppeteer = require('puppeteer-core'); (async () => { const browser = await puppeteer.launch({ executablePath: '/var/www/.cache/puppeteer/chrome/linux-130.0.6723.58/chrome', args: ['--no-sandbox', '--disable-setuid-sandbox'] }); // 业务逻辑代码 await browser.close(); })(); - 配置Puppeteer缓存路径:通过环境变量或代码明确指定缓存目录,确保Puppeteer能找到浏览器:
- 环境变量方式:Laravel启动Node脚本前,设置环境变量:
PUPPETEER_CACHE_DIR=/var/www/.cache/puppeteer - 代码配置方式:在Node脚本开头添加:
const { setCacheDir } = require('puppeteer'); setCacheDir('/var/www/.cache/puppeteer');
- 环境变量方式:Laravel启动Node脚本前,设置环境变量:
- 重新安装依赖:以
www-data账户进入项目目录,重新安装Puppeteer(若用puppeteer-core则安装puppeteer),确保依赖与浏览器版本匹配:sudo -u www-data cd /home/admin/node-twitterbot && npm install puppeteer - 验证浏览器版本匹配:检查错误提示的Chrome版本(130.0.6723.58)是否与缓存目录中的版本一致。若不一致,重新安装对应版本:
sudo -u www-data npx puppeteer browsers install chrome@130.0.6723.58 --path=/var/www/.cache/puppeteer
内容的提问来源于stack exchange,提问作者Jean François Manatane
相关产品推荐
相关产品推荐

