кукловод ожидает загрузки первого элемента - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь проверить первый класс элементов, загружаемый на мою страницу, чтобы выполнить мой код.Например, моя страница может иметь 3 разных состояния, она может иметь всплывающее окно с классом .a или страницу с классом .b или страницу с классом .c.Поэтому я хотел бы подождать, пока один из них загрузится, и получить, какой из них загрузится первым.Я пытался сделать это с Promise.race.Мой код:

await page.goto('myurl', { waitUntil: 'networkidle2', timeout: 30000 }).then(async () => {
await Promise.race([
     page.waitForSelector('.a'),
     page.waitForSelector('.b'),
     page.waitForSelector('.c'),
   ], {timeout: 60000 })
   console.log('done loading one of the 3 elements')
}).catch(e => {
  console.log(e)
})

Но после этого я получаю ошибку, которую, например, класс .b не может загрузить за 60000 мс.Разве это не должно работать?Promise.race все еще работает после выполнения одного из них.Как я могу решить это?

1 Ответ

0 голосов
/ 07 декабря 2018

Я не могу найти место в doc , где Promise.race() принимает аргумент {timeout: ...}.

Если вы хотите установить тайм-аут, я сделал бы это вpage.waitForSelector в Puppeteer.

    await page.goto('/11774681/kuklovod-ozhidaet-zagruzki-pervogo-elementa', { waitUntil: 'networkidle2', timeout: 30000 })
        .then(async () => {
            let elementHandle = await Promise.race([
                page.waitForSelector('.post-text', {timeout: 60000}),
                page.waitForSelector('.should-fail', {timeout: 60000}),
                page.waitForSelector('.should-fail-2', {timeout: 60000}),
            ]);

            console.log(elementHandle != null);
        })
        .catch(e => {
            console.log(e);
        });

И еще, но это был бы мой личный способ написать это, я бы все ждал, а не смешивался, жду / потом, вот так:

    await page.goto('/11774681/kuklovod-ozhidaet-zagruzki-pervogo-elementa', { waitUntil: 'networkidle2', timeout: 30000 })
        .catch(e => console.error(e));

    let elementHandle = await Promise.race([
        page.waitForSelector('.post-text', {timeout: 60000}),
        page.waitForSelector('.should-fail', {timeout: 60000}),
        page.waitForSelector('.should-fail-2', {timeout: 60000})
    ]);

    console.log(elementHandle != null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...