首页 > 解决方案 > puppeteer 事件错误处理程序不要去捕获块

问题描述

我正在使用 puppeteer(nodejs) 创建网络抓取,在网络抓取的某些特定部分,我正在监听一个事件,该事件在浏览器启动带有消息的对话框时触发。在此事件启动时,我抛出异常,但此异常使主进程退出,并且不会去 catch(err)

例子:

let page = null

const login = async () => {
  //Event listening
  page.on('dialog', async dialog => {
    throw new Error('login_error')
  }

async function processWebScraping () {
  try{   
     page = // Initialize puppeteer page
     await login() 
     [...]
  } catch(e){
     // the Error doen't come here, i got an uncaughtException 
     console.log(e) 
  }

有人知道我怎样才能得到这个错误并处理它?

标签: javascriptnode.jsweb-scrapingpuppeteer

解决方案


尝试将您的听众包裹在 a 中Promise。这样做将允许调用.then()来解决它并.catch()捕获错误。在您的示例中,它看起来像这样

const login = () => new Promise((resolve, reject) => {
  page.on('dialog', dialog => {
    reject(new Error('login_error'));
  });
});

function processWebScraping() {
  // page initialization

  login().then(() => {
    console.log('No error here');
  }).catch(err => {
    // Handle the error
    console.error(err);
  });
}

推荐阅读