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

部署至Render后Puppeteer失效,本地运行正常的问题求助

星座配对API部署Render平台返回500错误的解决办法

我开发了一个获取星座配对详情的API,本地通过Postman多次测试均运行正常,但部署至Render平台后,每次请求都会返回500内部错误。

相关代码

const puppeteer = require('puppeteer');

async function scrapeCompatibility(req, res) {
    try {
    
        const { sign1,sign2 } = req.body;
        const browser = await puppeteer.launch();
        const page = await browser.newPage();

        const url = `https://www.horoscope.com/us/games/compatibility/game-love-compatibility.aspx?ZodiacSignSelector_alphastring=${sign1}&PartnerZodiacSignSelector_alphastring=${sign2}`;
        await page.goto(url);

        // Selector for horoscope content might change on the website. Update as needed.
        const compatibilityScore = await page.evaluate(() => document.querySelector('.game-compatibility-score').innerText);
        const compatibilityText = await page.evaluate(() => document.querySelector('.module-skin p').innerText);
        await browser.close();
        console.log(compatibilityScore);
        console.log(compatibilityText);
        return res.status(200).json({
            success: true,
            data: {compatibilityScore,compatibilityText }
       })
    }
    catch (e)
    {
        return res.status(500).json({
            success: false,
            message:"Something went wrong"
        })
    }
}

module.exports = { scrapeCompatibility };

错误信息

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: /opt/render/.cache/puppeteer).
For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.
    at ChromeLauncher.resolveExecutablePath (/opt/render/project/src/server/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ProductLauncher.js:288:27)
    at ChromeLauncher.executablePath (/opt/render/project/src/server/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ChromeLauncher.js:207:25)
    at ChromeLauncher.computeLaunchArguments (/opt/render/project/src/server/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ChromeLauncher.js:89:37)
    at async ChromeLauncher.launch (/opt/render/project/src/server/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ProductLauncher.js:70:28)
    at async scrapeHoroscope (/opt/render/project/src/server/Controllers/Horoscope.js:7:25)

解决步骤

  • 安装Chrome浏览器到Render环境
    Render默认未安装Chrome,需在部署时自动安装。在package.json的scripts中添加postinstall脚本:

    "scripts": {
      "start": "node server.js",
      "postinstall": "npx puppeteer browsers install chrome"
    }
    

    这样每次部署构建时,会自动下载并安装Chrome到服务器环境。

  • 配置Puppeteer无头启动参数
    Render是无头服务器环境,需给Puppeteer添加适配的启动参数,避免权限和资源问题:
    修改puppeteer.launch()的代码:

    const browser = await puppeteer.launch({
      headless: 'new',
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-dev-shm-usage',
        '--disable-gpu',
        '--window-size=1920x1080'
      ]
    });
    
  • 优化错误日志排查
    原代码的catch块仅返回模糊提示,建议添加错误详情日志,方便后续排查:

    catch (e) {
        console.error('Scraping failed:', e);
        return res.status(500).json({
            success: false,
            message: "获取星座配对信息失败",
            error: e.message
        })
    }
    
  • 可选:自定义缓存路径
    如果仍存在缓存路径配置问题,可以指定项目内的缓存目录:

    const browser = await puppeteer.launch({
      // 其他参数...
      cacheDirectory: './.cache/puppeteer'
    });
    

    同时在.gitignore中添加/.cache/puppeteer/,避免缓存文件提交到版本库。

内容的提问来源于stack exchange,提问作者Zynox The Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:34