首页 > 解决方案 > 为什么 Headless Chrome,在 Lambda 上运行的 Puppeteer 在每个 page.click() 上都会出错,但在本地却很好?

问题描述

我正在使用 Puppeteer 运行 Lambda 函数。我想点击不同的 HTML 元素。当我在本地运行代码时,它可以正常工作并单击,但是当我在 Lambda 上运行它时,我得到:

错误:节点不可见或不是 HTMLElement

我已经设定 :

const browser = await puppeteerLambda.getBrowser({ headless: true, slowMo: 100,  args: ['--no-sandbox', '--disable-setuid-sandbox', '--single-process', '--start-fullscreen', '--window-size=1413,749']});     
await page.setViewport({ width: 1413, height: 749 });

 let path = actions.path;
 await page.waitFor(1000);
 clicker = await page.$(path);
 try {
     await clicker.hover();
     await clicker.click();
     await page.waitFor(1500);
 } catch (e) {
   console.log('path click error', e);
   await mailer.mailError(jobName, e);
 }

我认为应该可以使用此视口查看 html 元素。我也可以提取点击元素的 innerText 。我可以在本地单击它们。

有任何想法吗?

标签: aws-lambdachromiumpuppeteer

解决方案


这修复了它:

 clicker = await page.$(path);
 try {
 await page.evaluate((el) => {
     return el.click()
 }, clicker);
 await page.waitFor(1500);
 } catch (e) {
 console.log('click error', e);
 }

这可能是Puppeteer中无法完成的错误await clicker.click()。您也可以随时查看他们的文档


推荐阅读