首页 > 解决方案 > 使用heroku托管机器人时,不确定如何将puppeteer部署到heroku

问题描述

我有一个 bot 命令,它是一个图像抓取工具,它使用 puppeteer。我将 puppeteer 文件下载到我的 VSC(Visual Studio 代码)中,当我从 VSC 终端运行机器人时,图像抓取功能起作用。我可以将我使用的文件提交到 GitHub,然后链接到 Heroku。但是当我尝试在 Heroku 上托管机器人并使用图像抓取命令时,Heroku 给出UnhandledPromiseRejectionWarning: E​​rror: Failed to launch the browser process!我还将 puppeteer buildpack 添加到我的 heroku 项目中,但这似乎并不能解决问题。我见过的一种解决方案是将 { args: ['--no-sandbox'] } 添加到代码中,但我不确定在哪里添加它。我在哪里可以添加 --no-sandbox,或者是否有其他解决方案?谢谢

图像刮板代码:

var Scraper = require('images-scraper');

const google = new Scraper({
    puppeteer: {
        headless: true
    }
})



module.exports = {
    name: 'image',
    description: 'sends img to channel',
    async execute(client, message, args){
        const image_query = args.join(' ');
        let rng = Math.round(Math.random()*10)
        if(!image_query) return message.channel.send('Unable to find image');

        const image_results = await google.scrape(image_query, 100);
        message.channel.send(image_results[rng].url);
    }
}

标签: herokuvisual-studio-codediscord.js

解决方案


编辑(用于图像刮板)

您可以使用 puppeteer 选项正常使用所有 puppeteer.launch 选项。你可以这样做。

const google = new Scraper({
    puppeteer: {
        headless: true,
        args: ["--no-sandbox"],
    },
});

你可以在这里阅读更多关于在 Heroku 上使用 image-scraper 的信息。

上一个(用于木偶师)

正如您所提到的,您可以--no-sandbox像这样向您的代码添加参数。

const browser = await puppeteer.launch({
  args: [
    '--no-sandbox',
  ],
});

您可以在此处阅读 puppeteer.launch 文档。

如果这对您没有帮助,您应该查看有关在 Heroku 上运行 Puppeteer 的官方故障排除指南


推荐阅读