{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
......
},
"engines": {
"node": "8"
},
"dependencies": {
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1",
"puppeteer": "^5.4.1",
"puppeteer-extra": "^3.1.15",
"puppeteer-extra-plugin-stealth": "^2.6.3"
},
"devDependencies": {
"firebase-functions-test": "^0.2.0"
},
"private": true
}
云功能的开始
const functions = require('firebase-functions');
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
exports.myFunction = functions.https.onCall((data, context) => {
async function XXX() {
try {
const browser = await puppeteer.launch({
headless: false
});
......
}
catch(e) {
......
}
}
}
Full错误消息
Puppeteer is missing. :-)
Note: puppeteer is a peer dependency of puppeteer-extra,
which means you can install your own preferred version.
- To get the latest stable version run: 'yarn add puppeteer' or 'npm i puppeteer'
Alternatively:
- To get puppeteer without the bundled Chromium browser install 'puppeteer-core'
- To use puppeteer-firefox install 'puppeteer-firefox' and use the 'addExtra' export
update
我更换了
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const puppeteer = require('puppeteer');
然后我遇到了一个错误部署该功能。错误消息是
Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Is there a syntax error in your code?
i我检查了如果我切换回Puppeteer-Extra而不修改代码的任何其他部分,则部署工作正常。
我遇到了一个非常相似的问题。我当时正在研究一个节点项目,并安装了puppeteer用纱线刮擦网站,所有这些设置都归入一个docker容器(以后会在我的回答中解释为什么我要提到这一点)。
因此,这个问题与您的问题完全一样,即使已经安装了木偶,我也会遇到我缺少木偶的错误。我试图删除node_modules,然后再次安装,重新创建整个环境等,但似乎没有什么可用。
解开我的解决方案是添加我的package.json
依赖项:
"agent-base": "^6.0.2",
"https-proxy-agent": "^5.0.1",
原因是Puppeteer因该错误消息而失败,这是一条误导消息,但是它正在从Inside Puppeteer/node_modules/https_agent/src/agent.ts文件或类似的命名文件中丢弃错误关于文件名。重要的是,https_agent/src不是有效的路径,甚至不存在,但是
SO,通过添加
agent-base
基础依赖性解决了问题,我能够将我的
yarn
命令运行到下一个错误的程度。 我也明智地在Puppeteer的启动功能中添加了一些额外的参数,因此启动看起来像:
await Puppeteer.launch({ headless: true, defaultViewport: null, args: ['--no-sandbox', '--disable-setuid-sandbox'] })
我的进口是您在更新答案之前的初始进口:
import Puppeteer from 'puppeteer-extra'
import Stealth from 'puppeteer-extra-plugin-stealth'
从那里移动,并从我的第一个误导性错误中解脱出整个软件包缺少的错误,我在木偶执行时遇到了一个问题,可以打开无头浏览器。解决方案是在我的
Dockerfile
中添加这2行:
RUN apk add git netcat-openbsd chromium
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium-browser"
我大部分时间都花费的最大的事情是误导错误。