heroku - 使用heroku托管机器人时,不确定如何将puppeteer部署到heroku
问题描述
我有一个 bot 命令,它是一个图像抓取工具,它使用 puppeteer。我将 puppeteer 文件下载到我的 VSC(Visual Studio 代码)中,当我从 VSC 终端运行机器人时,图像抓取功能起作用。我可以将我使用的文件提交到 GitHub,然后链接到 Heroku。但是当我尝试在 Heroku 上托管机器人并使用图像抓取命令时,Heroku 给出UnhandledPromiseRejectionWarning: Error: 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);
}
}
解决方案
编辑(用于图像刮板)
您可以使用 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 的官方故障排除指南。
推荐阅读
- localhost - 如何摆脱 Vaadin 后备页面?
- java - 下面代码中的 onClickListenerObj 字段的数据类型是什么?
- kotlin - 在“runBlocking”中运行时等待的 Kotlin 结果失败并出现异常
- python - 模块内的 pytest 测试执行顺序是相反的。我该如何正确设置?
- selenium - 在构建詹金斯工作之前构建一个依赖的詹金斯工作并复制工件
- node.js - 如何找到discord.js中的await消息功能收集的消息附件的url?
- powershell - 查询列以查看值是否存在
- arrays - 如何转换对象数组中的值
- sql - SQL Server 将本地日期时间转换为 UTC unix 时间戳
- sql - 在 SSIS 中将动态表传递给 ADO.NET 目标