我们是否需要在 puppeteer 中添加错误和页面错误处理程序,或者 try/catch 是否足够?

编程入门 行业动态 更新时间:2024-10-06 15:19:43

我们是否需要在 puppeteer 中添加<a href=https://www.elefans.com/category/jswz/34/1771449.html style=错误和页面错误处理程序,或者 try/catch 是否足够?"/>

我们是否需要在 puppeteer 中添加错误和页面错误处理程序,或者 try/catch 是否足够?

我对在 puppeteer 中添加 page listeners 的需要(或以其他方式)感到有些困惑,以便捕获所有错误。

在下面的代码片段中,我添加了

'error'
'pageerror'
事件的处理程序。但是这些不会被
try/catch
周围的
await page.goto()
抓住吗?
try/catch
捕获的是什么,但没有被处理程序捕获,反之亦然?如果处理程序对
try/catch
未捕获的错误做出反应,我该如何正确处理这些错误而不会得到
uncaughtException
,因为这些错误发生在正常的
async/await
流程之外?我真的想对all错误使用相同的错误处理逻辑......即
await
所有错误,并以相同的方式处理any错误,而不仅仅是其中的一些错误。

(async () => {
    try {
        const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] });
        const page = await browser.newPage();
        page.on('error', error => {
            console.error('Page on error:', error);
        });
        page.on('pageerror', error => {
            console.error('Page on pageerror:', error);
        });
        await page.goto('');
        await page.screenshot({ path: './tmp/example.png' });
        await browser.close();
    } catch (err) {
        console.error('Try/catch error:', err);
    }
})();

我已经尝试将整个内容包装在一个

new Promise((resolve, reject) => { ... })
中,然后在页面错误处理程序中调用
reject(error)
,但我仍然遇到一些奇怪的
uncaughtException
错误(在我的真实代码中,我还无法重现在一个简单的例子中)......我无法弄清楚
new Promise()
方法在这种情况下是否完全错误......或者正确的方法是什么。

回答如下:

这个请求有点不寻常,表明可以通过更多信息提出更好的解决方案,但是如果你想在基于

page.on
处理程序的 Node 中抛出错误,你可以承诺这些处理程序并使用
Promise.race
如果处理程序被触发,则停止主线 Puppeteer 自动化。这是一个例子:

const puppeteer = require("puppeteer"); // ^19.11.1

const html = `<!DOCTYPE html><script>throw Error("hello world");</script>`;

(async () => {
  let browser;
  try {
    browser = await puppeteer.launch();
    const [page] = await browser.pages();
    const error = new Promise((resolve, reject) => {
      page.once("error", reject);
      page.once("pageerror", reject);
    });
    await Promise.race([
      error,
      (async () => {
        await page.setContent(html);
        await page.screenshot({path: "should_not_be_created.png"});
      })(),
    ]);
  }
  catch (err) {
    console.error(err.message); // => Error: hello world
  }
  finally {
    await browser?.close();
  }
})();

更多推荐

我们是否需要在 puppeteer 中添加错误和页面错误处理程序,或者 try/catch 是否足够?

本文发布于:2024-05-30 16:06:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770675.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   页面   程序   puppeteer   catch

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!