Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用Google Cloud函数和Puppeter在Google Cloud Bucket中保存屏幕截图?_Node.js_Google Cloud Platform_Puppeteer_Screenshot_Serverless - Fatal编程技术网

Node.js 如何使用Google Cloud函数和Puppeter在Google Cloud Bucket中保存屏幕截图?

Node.js 如何使用Google Cloud函数和Puppeter在Google Cloud Bucket中保存屏幕截图?,node.js,google-cloud-platform,puppeteer,screenshot,serverless,Node.js,Google Cloud Platform,Puppeteer,Screenshot,Serverless,我将直接讨论这个问题: 我正试图用谷歌云功能保存木偶演员的截图 当我查看截图时,我看到的只是一个小正方形。 当使用Base64编码时,我只得到一个纯空白作为图像 我错过什么了吗?我必须使用像“营业员”这样的额外包装吗 代码如下: /** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP r

我将直接讨论这个问题:

我正试图用谷歌云功能保存木偶演员的截图

当我查看截图时,我看到的只是一个小正方形。 当使用Base64编码时,我只得到一个纯空白作为图像

我错过什么了吗?我必须使用像“营业员”这样的额外包装吗

代码如下:

/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */

const moment = require('moment');
const puppeteer = require('puppeteer');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();



exports.helloWorld = async (req, res) => {
  const PUPPETEER_OPTIONS = {
    headless: true,
    slowMo: 500,
    args: [
      '--disable-dev-shm-usage',
      '--disable-setuid-sandbox',
      '--no-first-run',
      '--no-sandbox',
    ],
  };

  const bucketName = "imageBucket";
  const timeNow = new moment();
  console.log(timeNow);
  const browser = await puppeteer.launch(PUPPETEER_OPTIONS);
  const page = await browser.newPage();
  await page.goto(
    'https://www.example.com'
  );

  await page.setRequestInterception(true);
  page.on('request', (interceptedRequest) => {
    if (
      interceptedRequest.url().startsWith('https://www.google-analytics.com/')
    ) {
      const resource = interceptedRequest.url().toString();
      console.log(resource + ' blocked from loading.');
      interceptedRequest.abort();
    } else {
      interceptedRequest.continue();
    }
  });

  try {
    const searchTest = await page.$eval(
      'SELECTOR',
      (element) => {
        return element.innerHTML;
      }
    );

    await page.click('COOKIE ACCEPT SELECTOR');

    if (searchTest) {
    const screenshot = await page.screenshot({
        path: `/screenshot.png`,
    });
    const bucket = storage.bucket(bucketName);
    const file = bucket.file('puppeteer_screenshots/screenshot_XXXXX.png');
        await file.save(screenshot, {
        metadata: { contentType: 'image/png' },
    });
    await browser.close();
    res.status(200).end()

    } else {
      await browser.close();
      console.log('not found');
      res.end();
    }
  } catch (error) {

    console.log(error);

    res.status(404).end();
  }
}

木偶演员需要安装无头绒线才能工作。您不能使用云函数自定义运行时环境

为此,我建议您使用,在这里您可以定制您的容器,从而定制您的运行时环境


从功能迁移到云运行非常容易。创建一个Web服务器(如express)并将hello_world函数添加到“/”路径。这就是全部!!对于dockerfile,您在文档的“入门”部分有一个示例。

您真的直接从浏览器写入云存储桶吗?嗯,我正试图从谷歌云功能直接写入谷歌存储桶。在本地环境中运行代码将返回正确的base64 string/.png图像。我需要运行一个外部服务器来截图吗?非常感谢。节省了我很多时间!