Обработка сетевых ошибок с помощью Puppeteer

1

Кто-нибудь когда-либо пытался справиться с ошибками подключения к сети с помощью Puppeteer? Я попытался запустить случайную страницу и проверить, не получаю ли я ошибки до тех пор, пока она не будет работать (эта попытка находится в цикле for):

try{
        responseAwait = await page1.goto('https://www.residentadvisor.net/dj.aspx?country=01')
        } catch (err) {
        console.log('Page load fail : '+ err)
        if (err == 'Error: net::ERR_INTERNET_DISCONNECTED' || err == 'Error: net::ERR_NETWORK_CHANGED' || err == 'Error: net::ERR_NAME_NOT_RESOLVED'){
        let refreshIntervalId = setInterval(() =>{
           handleConnexionError(refreshIntervalId,page1)
        }, 5000) 
    }
    }

И вот функция, которую я использую, чтобы проверить, вернулась ли сеть:

async function handleConnexionError(refreshIntervalId,page1){
    console.log('Retrying to connect')
    let errorHandle = true
    await page1.goto('https://www.residentadvisor.net/dj.aspx?country=01').catch(() => {
        errorHandle = false
    })
    if (errorHandle) {
        console.log('Succesfully Reconnected')
        clearInterval(refreshIntervalId)
        return true
    }
    else {
        console.log('Connection Fail Retrying in 10 sec ...')
    }
}

Но он не работает должным образом, поскольку скрипт продолжает работать и циклы по всему циклу for, даже если ошибка произошла в ожидании...

Теги:
async-await
asynchronous
puppeteer

1 ответ

0

Вот пример того, как я проверяю ошибки своего приложения

GeneralFunctions.js

 validarErrores: (error, escenario)=>{
  console.log('${error.toString()}'.bgRed);
  if (typeof escenario == 'undefined'){
    return self.mensajeError('Error 500 - Objeto indefinido');
  }
  const { TimeoutError } = require('puppeteer/Errors');
  if (error instanceof TimeoutError) {
    if (error.toString().search('Navigation Timeout') != -1) {
      return self.mensajeError('Se produjo un error de <strong> Timeout </strong> al navegar');
    }
    for (pasos in escenario){
      for(prop in escenario[pasos]){
        if (error.toString().search(escenario[pasos][prop]) != -1) {
          return self.mensajeError('Se produjo un error al <strong> no poder localizar </strong> el campo <strong>${escenario[pasos][prop]}</strong>');
        }
      }
    }
    return self.mensajeError('Error 500 - ${error.toString}');
  }
  else if (error instanceof Error) {
    switch (true) {
      case (error.toString().includes('ERR_INTERNET_DISCONNECTED')):
        return self.mensajeError('No hay conexión fisica a la red Local');
        break;
      case (error.toString().includes('ERR_CONNECTION_TIMED_OUT')):
        return self.mensajeError('La aplicacion no se encuentra en línea');
        break;
      case (error.toString().includes('ERR_CONNECTION_REFUSED')):
        return self.mensajeError('La dirección de la aplicacion no es correcta');
        break;
      default:
        return self.mensajeError('La aplicación a encontrado el ${error}');
        break;
    }
  }
  // throw new Error(error);
}

main.js

(async () => {
          const puppeteer = require('puppeteer');
          const browser = await puppeteer.launch();
          const page = await browser.newPage();            
          try {
            await page.setViewport({ "width": 1280, "height": 720 });
            // Do someting
            } catch (e) {
              ${funcionesGenerales.validarErrores(e, selectores);
            }finally{
              await browser.close();
            }
        })();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню