Javascript Puppeter-如何在Firebase云函数中使用userDataDir?
这个傀儡脚本在本地运行时运行良好,但是在云函数上运行时不使用userDataDir。我尝试了初始化userDataDir的所有组合 更新: 文件夹结构:Javascript Puppeter-如何在Firebase云函数中使用userDataDir?,javascript,node.js,firebase,google-cloud-functions,puppeteer,Javascript,Node.js,Firebase,Google Cloud Functions,Puppeteer,这个傀儡脚本在本地运行时运行良好,但是在云函数上运行时不使用userDataDir。我尝试了初始化userDataDir的所有组合 更新: 文件夹结构: Functions ├── index.js │ ├── userDataDir index.js: const functions = require("firebase-functions"); const puppeteer = require("puppeteer"); const path = require("path");
Functions
├── index.js
│ ├── userDataDir
index.js:
const functions = require("firebase-functions");
const puppeteer = require("puppeteer");
const path = require("path");
exports.testPupFunction = functions
.region("us-west1")
.runWith({ memory: "1GB", timeoutSeconds: 60 })
.https.onRequest(async (req, res) => {
const browser = await puppeteer.launch({
headless: true,
ignoreHTTPSErrors: true,
args: [
`--user-data-dir=${path.resolve(__dirname, "./userDataDir")}`,
`--user-data-dir=${path.resolve(__dirname, "userDataDir")}`,
`--user-data-dir=./userDataDir`,
"--disable-setuid-sandbox",
"--no-sandbox"
],
userDataDir: "./userDataDir"
userDataDir: "userDataDir"
});
try {
const page = await browser.newPage();
await page.setViewport({ width: 800, height: 600 });
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
await page.goto("stackoverflow.com", {
waitUntil: "networkidle0"
});
await delay(1000);
const buffer = await page.screenshot({ fullPage: true });
res.type("image/png").send(buffer);
} catch (e) {
await browser.close();
res.status(500).send(e.toString());
}
await browser.close();
});
有没有办法解决这个问题?谢谢 请编辑该问题,以准确说明您正在部署什么,以显示请求的数据目录在运行时应可用。如果您没有部署它,它将不可用。完成。可能是这样的-我只是简单地部署它(意味着它包含在我“firebase deploy”的文件夹中)&添加--user data dir args。firebase CLI将打包“functions”文件夹的全部内容,并在运行时使函数可以使用这些内容。我希望
\uuu dirname
是该部署的根目录,您应该能够读取这些文件。尝试在函数中编写一些代码(使用节点的fs
模块),以确保您可以单独读取预期的文件,以确保它们存在。我使用fs模块列出目录中的所有文件并确认userDataDir在那里!我还尝试创建一个tmp
文件夹&将文件夹放在那里,但也没有成功。转储args
,看看它是否完全包含您期望的内容?此时,您基本上只是调试。