Ubuntu 20.04下Puppeteer Sharp的--no-sandbox选项失效问题
解决Puppeteer Sharp在Ubuntu 20.04下root运行时的沙箱错误
先确认代码参数配置是否正确
确保你在LaunchOptions的Args集合里正确添加参数,避免因写法错误导致参数未生效。
正确的配置示例:
var launchOptions = new LaunchOptions { Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" }, Headless = true // 根据需求添加其他配置 }; using var browser = await Puppeteer.LaunchAsync(launchOptions);
如果是用AddRange添加参数,检查语法是否正确:
var launchOptions = new LaunchOptions(); launchOptions.Args.AddRange(new[] { "--no-sandbox", "--disable-setuid-sandbox" });
手动指定Chromium可执行路径
有时Puppeteer Sharp自动下载的Chromium路径与系统安装的不一致,导致参数未传递到正确的进程。可以通过命令which chromium或which chromium-browser获取实际路径,然后在代码中指定:
var launchOptions = new LaunchOptions { ExecutablePath = "/usr/bin/chromium-browser", // 替换为你的实际路径 Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" } };
避免以root用户运行API(推荐方案)
以root运行服务存在安全风险,建议创建普通用户来运行.NET Core API:
- 创建新用户:
sudo adduser puppeteer-user
- 赋予API目录权限:
sudo chown -R puppeteer-user:puppeteer-user /path/to/your/api
- 切换用户运行API:
su - puppeteer-user cd /path/to/your/api dotnet YourApi.dll
普通用户运行时无需添加沙箱禁用参数,即可正常启动浏览器。
检查沙箱开关是否被手动启用
如果代码中显式设置了Sandbox = true(默认值为true),需要手动关闭:
var launchOptions = new LaunchOptions { Sandbox = false, // 关闭沙箱会自动添加禁用参数 // 此时可省略Args中的--no-sandbox和--disable-setuid-sandbox };
内容的提问来源于stack exchange,提问作者Kuartz
相关产品推荐
相关产品推荐

