You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Puppeteer上传文件失败,Chromium弹出“Aw Snap!”错误

Puppeteer文件上传触发Chromium“Aw Snap!”崩溃的排查与解决

以下是针对你遇到的两种标准文件上传方式均导致Chromium崩溃问题的常见原因及解决办法:

1. 文件路径或权限问题

尽管你标注路径有效,但仍可能存在以下情况:

  • 路径格式错误:Windows系统下需使用双反斜杠(C:\\path\\to\\file.pdf)或正斜杠(C:/path/to/file.pdf);
  • 文件实际不存在:可通过Node.js的fs.existsSync()验证:
    const fs = require('fs');
    console.log(fs.existsSync("/validfilepath.pdf")); // 输出true才是有效路径
    
  • 权限不足:运行Puppeteer的进程无读取该文件的权限(Linux/macOS下需检查文件权限,macOS需确保终端有文件访问权限)。

2. 元素选择器或上下文问题

  • 选择器未准确定位到<input type="file">元素:可通过page.$eval()测试是否能获取元素:
    const isElementExist = await page.$eval("blah blah blah > input[type=file]", el => !!el);
    console.log(isElementExist); // 输出true说明选择器有效
    
  • 元素位于iframe内:若文件上传按钮在iframe中,需先切换到iframe上下文再操作:
    // 根据iframe的URL、名称或选择器获取iframe对象
    const iframe = await page.frame({ url: 'https://example.com/iframe-url' });
    const fileButton = await iframe.$("blah blah blah > input[type=file]");
    await fileButton.uploadFile("/validfilepath.pdf");
    

3. Puppeteer与Chromium版本不兼容

Puppeteer依赖特定版本的Chromium,版本不匹配可能导致崩溃:

  • 重新安装Puppeteer,让其自动下载匹配的Chromium:
    npm uninstall puppeteer
    npm install puppeteer
    

4. 页面逻辑或反爬机制冲突

  • 手动测试:在普通Chromium浏览器中手动点击上传按钮,若同样崩溃,说明是页面自身问题;
  • 禁用沙箱(注意安全风险,仅用于测试):部分页面的反爬机制会检测沙箱环境,可尝试添加启动参数:
    const browser = await puppeteer.launch({
      args: ['--no-sandbox', '--disable-setuid-sandbox']
    });
    
  • 启用调试日志:查看崩溃时的具体错误信息:
    const browser = await puppeteer.launch({
      dumpio: true,
      args: ['--enable-logging', '--v=1']
    });
    

5. 内存资源不足

若运行环境内存有限,可通过启动参数增加Chromium的内存分配:

const browser = await puppeteer.launch({
  args: ['--max-old-space-size=4096'] // 分配4GB内存,根据实际调整
});

内容的提问来源于stack exchange,提问作者Steven Livingston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:12:13