Puppeteer page.waitForNavigation () обработка ошибок времени ожидания - PullRequest
0 голосов
/ 09 октября 2018

Используя Puppeteer, я открываю страницу при вводе значения - он выводит результат.

await page.click('button[class="button form-button rs-gcbalance-btn"]')

await page.waitForSelector('div[class="small-4 large-4 rs-gcbalance-result-num-col').catch(err => console.log(err))

await page.evaluate((card) => {
    console.log(card + " - " + document.querySelectorAll('div[class="small-4 large-4 rs-gcbalance-result-num-col"]')[1].querySelector('span').innerHTML)
}, card)

Но это работает правильно только в том случае, если значение при вводе является действительным.Если это не так, он выдаст ошибку, но без какой-либо сетевой активности или события загрузки.Это означает, что если значение неверно, ожидаемый элемент не появится и выдаст ошибку, закрывая программу.

Navigation Timeout Exceeded: 30000ms exceeded

Вопрос в том, как обработать ошибку, чтобы, если она выдает ошибку тайм-аута, я мог ее перехватить и вызвать другую функцию?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Попробуйте, это поможет решить вашу проблему.page.waitForNavigation ({время ожидания: 1000, waitUntil: 'domcontentloaded'});

0 голосов
/ 09 октября 2018

Просто оберните его в try catch блок:

try {
  await page.waitForSelector('#element', { timeout: 1000 });
  // do what you have to do here
} catch (e) {
    console.log('element probably not exists');
}

Вот полностью рабочий пример:

const puppeteer = require('puppeteer');

const html = `
<html>
    <body>
        <div id="element">element inner html</div>
    </body>
</html>`;

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(`data:text/html,${html}`);

  try {
    await page.waitForSelector('#element-not-exists', { timeout: 1000 });
    const element = await page.$('#element-not-exists');
    console.log(await (await element.getProperty('innerHTML')).jsonValue());
  } catch (e) {
    console.log('element probably not exists');
  }
  await browser.close();
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...