Javascript 使用Puppeter拍摄屏幕截图并将其存储在google云存储中

Javascript 使用Puppeter拍摄屏幕截图并将其存储在google云存储中,javascript,node.js,google-cloud-functions,google-cloud-storage,puppeteer,Javascript,Node.js,Google Cloud Functions,Google Cloud Storage,Puppeteer,我将马上描述我的最终目标:我希望能够使用Puppeter拍摄我的网站截图,并将其直接上传到谷歌云存储(例如使用云功能) 然而,如果我没有给出本地存储文件的路径,那么我在实际上传文件时遇到了一个问题。这是我的代码: (async () => { const browser = await puppeteer.launch({headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox']}); const page

我将马上描述我的最终目标:我希望能够使用Puppeter拍摄我的网站截图,并将其直接上传到谷歌云存储(例如使用云功能)

然而,如果我没有给出本地存储文件的路径,那么我在实际上传文件时遇到了一个问题。这是我的代码:

(async () => {
  const browser = await puppeteer.launch({headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox']});
  const page = await browser.newPage();
  await page.goto('https://google.com');
  const filename = await page.screenshot();


    await storage.bucket(bucketName).upload(filename, {
        gzip: true,
})
  

console.log(`${filename} uploaded to ${bucketName}.`);
await browser.close();
})();
我尝试过多种方法,比如对图像进行不同的编码,并将其从缓冲区转换为字符串,但我一直遇到相同的两个错误,或者:

  • “path”参数的类型必须为string。接收到缓冲区的实例,或
  • 参数“path”必须是不带空字节的字符串或Uint8Array
我感谢所有我能得到的帮助
问候你有三种方法

  • 第一种方法是将路径选项添加到
    page.screenshot()
    以存储 本地计算机中的屏幕截图,然后将此路径添加到
    storage.bucket(bucketName).upload()
    将此图像上载到谷歌 云
  • 第二种方法是以base64编码方式获取截图图像,然后用特定名称将其上传到谷歌云
  • 第三种方法是以二进制编码方式获取截图图像,然后用特定名称将其上传到谷歌云

    • 第一条路

    • 第二条路

    • 第三条路

    参考资料


    如果要从缓冲区上载,必须学习如何使用nodejs流api,并通过使用其api创建的流写入云存储。上传的方式根本不会做你想做的事。哇,太感谢你了!!!你让我开心,这正是我想要的!!!我会仔细阅读你们的参考资料,这样我就能明白发生了什么,再次感谢你们:用gzipped的第三种方法(二进制屏幕截图)不可能吗?
    (async () => {
        const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] });
        const page = await browser.newPage();
        await page.goto('https://google.com');
        await page.screenshot({
            path: `/screenshot.png`,
        });
    
        const bucket = storage.bucket('bucket_name');
        const options = {
            destination: 'puppeteer_screenshots/screenshot_XXX.png',
            gzip: true,
        };
        await bucket.upload(`/screenshot.png`, options);
        console.log("Created object gs://bucket_name/puppeteer_screenshots/screenshot_XXX.png");
    
        await browser.close();
    })();
    
    (async () => {
        const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] });
        const page = await browser.newPage();
        await page.goto('https://google.com');
        const screenshotBase64 = await page.screenshot({
            encoding: 'base64',
        });
    
        
        const bucket = storage.bucket('bucket_name');
        const file = bucket.file('puppeteer_screenshots/screenshot_XXX.png');
        await file.save(screenshotBase64, {
            metadata: { contentType: 'image/png' },
        });
        console.log("Created object gs://bucket_name/puppeteer_screenshots/screenshot_XXX.png");
    
        await browser.close();
    })();
    
    (async () => {
        const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] });
        const page = await browser.newPage();
        await page.goto('https://google.com');
        const screenshotBinary = await page.screenshot({ encoding: 'binary' });
    
        const bucket = storage.bucket('bucket_name');
        const file = bucket.file('puppeteer_screenshots/screenshot_XXX.png');
        await file.save(screenshotBinary, {
            metadata: { contentType: 'image/png' },
        });
        console.log("Created object gs://bucket_name/puppeteer_screenshots/screenshot_XXX.png");
    
        await browser.close();
    })();