[英]Puppeteer (on Heroku): how to prevent hanging Chromium processes?
[英]Puppeteer error on Heroku: Could not find Chromium
我對部署/托管 Node 應用程序和 Puppeteer 有點陌生。
但是,當我嘗試使用 Puppeteer 時,我的應用程序在 Heroku 上遇到了問題。
完整的錯誤是:
Error: Could not find Chromium (rev. 1056772). This can occur if either
2022-11-10T06:44:07.938983+00:00 app[web.1]: 1. you did not perform an installation before running the script (e.g. `npm install`) or
2022-11-10T06:44:07.938983+00:00 app[web.1]: 2. your cache path is incorrectly configured (which is: /app/.cache/puppeteer).
2022-11-10T06:44:07.938983+00:00 app[web.1]: For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.
2022-11-10T06:44:07.938984+00:00 app[web.1]: at ChromeLauncher.resolveExecutablePath (/app/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ProductLauncher.js:120:27)
2022-11-10T06:44:07.938984+00:00 app[web.1]: at ChromeLauncher.executablePath (/app/node_modules/puppeteer-core/lib/cjs/puppeteer/node/ChromeLauncher.js:166:25)
2022-11-10T06:44:07.938985+00:00 app[web.1]: at PuppeteerNode.executablePath (/app/node_modules/puppeteer-core/lib/cjs/puppeteer/node/PuppeteerNode.js:162:105)
2022-11-10T06:44:07.938985+00:00 app[web.1]: at Object.<anonymous> (/app/index.js:29:145)
2022-11-10T06:44:07.938985+00:00 app[web.1]: at Module._compile (node:internal/modules/cjs/loader:1159:14)
2022-11-10T06:44:07.938986+00:00 app[web.1]: at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
2022-11-10T06:44:07.938986+00:00 app[web.1]: at Module.load (node:internal/modules/cjs/loader:1037:32)
2022-11-10T06:44:07.938986+00:00 app[web.1]: at Module._load (node:internal/modules/cjs/loader:878:12)
2022-11-10T06:44:07.938986+00:00 app[web.1]: at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
2022-11-10T06:44:07.938987+00:00 app[web.1]: at node:internal/main/run_main_module:23:47
我的 index.js 代碼是:
const puppeteer = require('puppeteer-extra')
const RecaptchaPlugin = require('puppeteer-extra-plugin-recaptcha')
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
const { executablePath } = require('puppeteer')
const axios = require('axios')
//pupeteer plugins
puppeteer.use(
RecaptchaPlugin({
provider: {
id: '2captcha',
token: 'XXX'
},
visualFeedback: true //colorize reCAPTCHAs (violet = detected, green = solved)
})
)
puppeteer.use(StealthPlugin())
//pupeteer crawl
try {
puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'], headless: true, executablePath: executablePath(), ignoreHTTPSErrors: true }).then(async browser => {
console.log('Running tests..')
const page = await browser.newPage()
await page.goto('https://bot.sannysoft.com')
await page.setViewport({ width: 1680, height: 857 })
await page.waitForTimeout(5000)
await page.screenshot({ path: 'testresult.png', fullPage: true })
await browser.close()
console.log(`All done, check the screenshot. ✨`)
})
} catch (error) {
console.error(error);
}
這些是我在 Heroku 中的構建包:
我已經與這些斗爭了幾天並嘗試了一切:(
謝謝!!
我嘗試添加必要的標志:
args: ['--no-sandbox', '--disable-setuid-sandbox']
還有構建包: https://github.com/jontewks/puppeteer-heroku-buildpack
這些是人們在其他問題線程中提到的常見解決方案。
我實際上今天才遇到這個問題。 分析發生這種情況的原因:Puppeteers new v19 更新了.cache
的存儲方式。 這會導致構建和部署出現問題。 因此,如果您的構建找不到.cache
,那么它就找不到 chromium 並崩潰。
你的兩個選擇是告訴你的程序運行 v18 版本的 puppeteer 或者簡單地將這個配置放在與你的 index.js 相同的目錄中
project-directory/.puppeteerrc.cjs
:
const {join} = require('path');
/**
* @type {import("puppeteer").Configuration}
*/
module.exports = {
// Changes the cache location for Puppeteer.
cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};
確保調用它.puppeteerrc.cjs
然后卸載然后重新安裝 puppeteer 並將.cache
添加到你的.gitignore
如果這仍然不起作用,您可以在以下位置嘗試其他配置選項:
https://pptr.dev/guides/configuration/
木偶操縱者不面臨這個問題:17.1.3
前幾天我遇到了這個問題。 我在 Windows Server 2022(一個 Vultr 實例)上使用 Puppeteer 構建/打包了一個 Electron 應用程序,然后嘗試在 Windows 11 家用筆記本電腦上運行構建的可執行文件。 我嘗試了官方建議的使用.puppeteerrc.cjs
文件的解決方案。 它不起作用。
唯一對我有用的解決方案是降級到 Puppeteer 18.1.0。 希望對某人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.