Кукольник - не может прочитать свойство 'click' из неопределенного - PullRequest
0 голосов
/ 18 декабря 2018

Когда я устанавливаю безголовый: true (без открытого браузера) в Puppeteer, у меня появляется ошибка:

Оценка не пройдена: Ошибка типа: Не удается прочитать свойство 'click' из undefined в puppeteer_evaluation_script : 3: 115

Я добавляю, что если безголовый: false (с открытым браузером) скрипт работает правильно ... Из моих наблюдений выясняется, что ошибка возникает при выполнении этой функции

await page.evaluate( () =>
    {
    Array.from( document.querySelectorAll( '.N3ewq' ) ).filter( element => element.textContent == 'Switch' )[0].click();
    });

Как это исправить?Спасибо за все предложения

Ответы [ 3 ]

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

Попробуйте использовать дождитесь селектора , поэтому ваш код станет примерно таким

await page.waitForSelector('.N3ewq');
await page.evaluate(() => {
   Array.from(document.querySelectorAll( '.N3ewq')).filter(element => 
     element.textContent == 'Switch' )[0].click();
});
0 голосов
/ 20 декабря 2018

Как говорили другие парни, вы можете использовать waitForSelector и waitForNavigation , чтобы решить вашу проблему, но вы можете справиться с этим немного лучше, чтобы не потерять контроль над ошибками.

Например, вы можете сделать что-то подобное:

await page.waitForSelector('.N3ewq',{timeout:3000}).catch(() => console.log('Class N3ewq doesn\'t exist!'));
await page.evaluate(() => {
          if(document.querySelectorAll('#step_next').length > 0){
              Array.from(document.querySelectorAll( '.N3ewq')).filter(element => element.textContent == 'Switch' )[0].click();
          }
      });

Надеюсь, это поможет!

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

Попробуйте дождаться полной загрузки страницы, прежде чем оценивать:

await page.waitForNavigation({ waitUntil: 'networkidle2' });
await page.evaluate( () => {
    Array.from( document.querySelectorAll( '.N3ewq' ) ).filter( element => element.textContent == 'Switch' )[0].click();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...