有关从页面提取信息的 lambda 代码的基本问题

问题描述 投票:0回答:1

我正在学习如何将 AWS lambda 与 Node js 18-20 结合使用,但我很难让最基本的示例发挥作用。例如,我有 sparticuz-chromium 109.0.5 模块和 puppeteer core 19.4.0,但我无法让这个示例工作:

const puppeteer = require("puppeteer-core");
const chromium = require("@sparticuz/chromium");

async function handler(event = {}, context = {}) {
  try {
    const browser = await puppeteer.launch({
      executablePath: await chromium.executablePath(),
      headless: chromium.headless,
      ignoreHTTPSErrors: true,
      defaultViewport: chromium.defaultViewport,
      args: [...chromium.args, "--hide-scrollbars", "--disable-web-security"],
    });

    const page = await browser.newPage();

    // Navegar a la página de ejemplo (example.com) con manejo de errores y reintento
    let success = false;
    let attempts = 0;
    while (!success && attempts < 3) {
      try {
        await page.goto("https://example.com", { timeout: 30000 }); // Ajusta el tiempo de espera según sea necesario
        success = true;
      } catch (err) {
        console.error("Error al navegar a la página:", err);
        attempts++;
      }
    }

    // Verificar si la navegación fue exitosa
    if (!success) {
      console.error("La navegación no pudo completarse después de varios intentos.");
      await browser.close();
      return;
    }

    // Extraer el título de la página y mostrarlo en la consola
    const title = await page.title();
    console.log("Título de la página:", title);

    // Extraer el contenido de la página y mostrarlo en la consola
    const content = await page.content();
    console.log("Contenido de la página:", content);

    // Cerrar el navegador
    await browser.close();
  } catch(err) {
    console.log("Ocurrió un error:", err);
  }
}

module.exports = { handler };

提前致谢

打开网页并从中提取信息的简单代码。

node.js amazon-web-services lambda
1个回答
0
投票

所提供代码的问题在于,它被设计为使用 Puppeteer 库运行网页抓取操作,该库依赖于无头浏览器与网页交互。但是,在 AWS Lambda 函数上运行此代码时,它将无法按预期工作。

主要原因是AWS Lambda函数被设计为事件驱动、无服务器和无状态。这意味着 Lambda 函数的每次调用都是一个独立的执行环境,并且该函数不知道或控制先前或后续的执行。

就网页抓取而言,Puppeteer 库需要成熟的浏览器环境才能运行,包括必要的依赖项、库和系统级资源。然而,AWS Lambda 函数受限于有限的执行环境,可能无法满足 Puppeteer 库的要求

© www.soinside.com 2019 - 2024. All rights reserved.