shelfio / chrome-aws-lambda-layer

58 MB Google Chrome to fit inside AWS Lambda Layer compressed with Brotli
MIT License
637 stars 45 forks source link

Could not find expected browser (chrome) locally. Run `npm install` to download the correct Chromium revision (869685). #39

Closed patrickbussmann closed 3 years ago

patrickbussmann commented 3 years ago

My basic code:

const puppeteer = require('puppeteer-core');

exports.handler = async (event, context, callback) => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://google.de', {
        waitUntil: 'networkidle2',
    });
    const content = await page.pdf({ format: 'a4' });
    await browser.close();
    callback(null, content);
};

serverless.yml

    chrome:
        handler: handlers/htmlToPdf.handler
        runtime: nodejs14.x
        memorySize: 512
        timeout: 30
        layers:
            - arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda:22

And response.

{
  "errorType": "Error",
  "errorMessage": "Could not find expected browser (chrome) locally. Run `npm install` to download the correct Chromium revision (869685).",
  "trace": [
    "Error: Could not find expected browser (chrome) locally. Run `npm install` to download the correct Chromium revision (869685).",
    "    at ChromeLauncher.launch (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js:82:27)",
    "    at async Runtime.exports.handler (/var/task/handlers/htmlToPdf.js:4:21)"
  ]
}

Would be nice when there is a solution 😊

patrickbussmann commented 3 years ago

OK needed to change the logic...

const chromium = require('chrome-aws-lambda');
const puppeteer = require('puppeteer-core');

exports.handler = async (event, context, callback) => {
    const browser = await puppeteer.launch({
        args: chromium.args,
        defaultViewport: chromium.defaultViewport,
        executablePath: await chromium.executablePath,
        headless: chromium.headless,
        ignoreHTTPSErrors: true,
    });
    const page = await browser.newPage();
    await page.goto('https://google.de', {
        waitUntil: 'networkidle0',
    });
    const content = await page.pdf({ format: 'a4' });
    await browser.close();
    callback(null, content);
};
shivika24 commented 2 years ago

When

OK needed to change the logic...

const chromium = require('chrome-aws-lambda');
const puppeteer = require('puppeteer-core');

exports.handler = async (event, context, callback) => {
    const browser = await puppeteer.launch({
        args: chromium.args,
        defaultViewport: chromium.defaultViewport,
        executablePath: await chromium.executablePath,
        headless: chromium.headless,
        ignoreHTTPSErrors: true,
    });
    const page = await browser.newPage();
    await page.goto('https://google.de', {
        waitUntil: 'networkidle0',
    });
    const content = await page.pdf({ format: 'a4' });
    await browser.close();
    callback(null, content);
};

When i tried this, getting this error --> TypeError: Cannot set property _preferredRevision of # which has only a getter at PuppeteerNode.get _launcher [as _launcher]