我正在学习如何将 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 };
提前致谢
打开网页并从中提取信息的简单代码。
所提供代码的问题在于,它被设计为使用 Puppeteer 库运行网页抓取操作,该库依赖于无头浏览器与网页交互。但是,在 AWS Lambda 函数上运行此代码时,它将无法按预期工作。
主要原因是AWS Lambda函数被设计为事件驱动、无服务器和无状态。这意味着 Lambda 函数的每次调用都是一个独立的执行环境,并且该函数不知道或控制先前或后续的执行。
就网页抓取而言,Puppeteer 库需要成熟的浏览器环境才能运行,包括必要的依赖项、库和系统级资源。然而,AWS Lambda 函数受限于有限的执行环境,可能无法满足 Puppeteer 库的要求