【问题标题】:Puppeteer + AWS Lambda - Could not find browser revisionPuppeteer + AWS Lambda - 找不到浏览器修订版
【发布时间】:2020-11-26 01:24:02
【问题描述】:

我一直试图让 puppeteer 在 AWS Lambda 上工作,但遇到了错误。我收到的信息是:

“错误”:“找不到浏览器修订版 782078。运行“PUPPETEER_PRODUCT=firefox npm install”或“PUPPETEER_PRODUCT=firefox yarn install”以下载支持的 Firefox 浏览器二进制文件。”

我有足够的内存分配给这个特定的 lambda 以在 11 秒左右运行该函数。

该错误仅在冷启动时显示

函数离线运行良好,100% 成功。 LOCAL=true是离线运行的时候设置的,所以这里有代码可以区分这两者。

这是我的代码中关于这个 lambda 的重要部分。

import chromium from "chrome-aws-lambda";
import { inflate } from "lambdafs";
import path from "path";

const isLocal = !!process.env.LOCAL;

process.env.HOME = "/tmp";
if (process.env.FONTCONFIG_PATH === undefined) {
  process.env.FONTCONFIG_PATH = "/tmp/aws";
}

if (process.env.LD_LIBRARY_PATH === undefined) {
  process.env.LD_LIBRARY_PATH = "/tmp/aws/lib";
} else if (process.env.LD_LIBRARY_PATH.startsWith("/tmp/aws/lib") !== true) {
  process.env.LD_LIBRARY_PATH = [...new Set(["/tmp/aws/lib", ...process.env.LD_LIBRARY_PATH.split(":")])].join(":");
}

let input;
if (!isLocal) {
  input = "/opt/nodejs/node_modules/chrome-aws-lambda/bin";
} else {
  input = path.resolve(__dirname, "../node_modules/chrome-aws-lambda/bin");
}

const blockedResourceTypes = ["image", "media", "font", "texttrack", "object", "beacon", "csp_report", "imageset"];

const skippedResources = [
  "quantserve",
  "adzerk",
  "doubleclick",
  "adition",
  "exelator",
  "sharethrough",
  "cdn.api.twitter",
  "google-analytics",
  "googletagmanager",
  "fontawesome",
  "facebook",
  "analytics",
  "optimizely",
  "clicktale",
  "mixpanel",
  "zedo",
  "clicksor",
  "tiqcdn",
];

export async function handler(event) {
  const credentials = {
    userName: event.userName,
    password: event.password,
    site_login_id: event.site_login_id,
    user_id: event.juice_userid,
  };

  let chrome, aws, shader;

  (async () => {
    chrome = await inflate(`${input}/chromium.br`);
    shader = await inflate(`${input}/swiftshader.tar.br`);
    aws = await inflate(`${input}/aws.tar.br`);
  })();

  const chromePath = isLocal ? undefined : chrome;

  const puppeteer = chromium.puppeteer;

  const browser = await puppeteer.launch({
    args: chromium.args,
    defaultViewport: chromium.defaultViewport,
    executablePath: chromePath,
    ignoreDefaultArgs: ["--disable-extensions"],
    headless: true,
  });
}

【问题讨论】:

    标签: browser aws-lambda puppeteer revision


    【解决方案1】:

    您似乎自己在压缩 chromium 文件,这不是 chrome-aws-lambda 的用途。

    这是一个非常简单的 sn-p,它展示了如何在 lambda 环境中启动 puppeteer:

    const chromium = require('chrome-aws-lambda');
    
    const handler = async () => {
      let result = null;
      let browser = null;
    
      try {
        browser = await chromium.puppeteer.launch({
          args: chromium.args,
          defaultViewport: chromium.defaultViewport,
          executablePath: await chromium.executablePath,
          headless: chromium.headless,
          ignoreHTTPSErrors: true,
        });
    
        let page = await browser.newPage();
    
        await page.goto(event.url || 'https://example.com');
    
        result = await page.title();
      } catch (error) {
        // handle error
      } finally {
        if (browser !== null) {
          await browser.close();
        }
      }
    };
    
    module.exports = { handler };
    

    chrome-aws-lambda 在你做await chromium.executablePath 时处理必要资源的放气,你可以see this in the source code。

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 2018-02-07
      • 1970-01-01
      • 2022-06-16
      • 2020-03-07
      • 1970-01-01
      • 2019-05-28
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多