возвращаемое значение от кукловода page.evaluate () - PullRequest
0 голосов
/ 08 апреля 2020

Итак, у меня есть функция, которая возвращает page, что необходимо для следующей функции:

async function browser(){
        const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox'], headless: false, devtools : true});
        const incog = await browser.createIncognitoBrowserContext();
        const page = await incog.newPage();

            await page.goto('web')
            .then(function(){
       page.evaluate(function(){
            $(document).ready(function(){
                $('input[name ="username"]').val("a");
                $('input[name ="password"]').val("b");
                $(document).ready(function(){
                    $('#loginbtn').click();
                });
            });
        });
      });

      await page.waitForNavigation({waitUntil : 'load'});
      return page;

Итак, я передаю значение результата browser(), выполняя browser().then(result => nextFunction(result), что в конечном итоге передает страницу в nextFunction()


async function nextFunction(page){
    await page.goto('web')
       .then(function(){
        var msg = "Test : \n\n";
        page.evaluate(function(){
            var num = 1;
            $('.card').each(function(i, e){
                msg += "======= Activity "+num+" ========\n";
                msg += "Subject : " + $(this).find('.name').text() + "\n";
                msg += "Due : " + $(this).find('.date').text() + "\n";
                msg += "===== End Activity "+num+" ======\n\n";
                num++;
            });
        });
        console.log(msg);
       });
}

Я пытался напечатать msg из nextFunction(), но он печатает только Test:

Что я пытаюсь достичь: получить msg результат или присваивать переменную из возвращаемого значения nextFunction()

Есть ли решение или лучший способ сделать это?

1 Ответ

0 голосов
/ 08 апреля 2020
  1. Для более чистого кода и упрощения поиска и устранения неисправностей выберите полосу, асинхронную / ожидающую или связывающую с помощью then. Использование обоих затрудняет чтение кода. async / await более читабелен и менее сложен для обработки ошибок. Подробнее здесь
  2. Чтобы увидеть console.log в evaluate, прослушайте событие 'console':
const page = await browser.newPage();
page.on('console', msg => console.log(msg.text()));
page.evaluate контекст отделен от Puppeteer, поэтому оценка msg будет undefined. Переместите msg для оценки и затем верните результат обратно кукловоду.
let msg = await page.evaluate(function(){
   let msg = "Test : \n\n";
   let num = 1;
   $('.card').each(function(i, e){
      msg += "======= Activity "+num+" ========\n";
      msg += "Subject : " + $(this).find('.name').text() + "\n";
      msg += "Due : " + $(this).find('.date').text() + "\n";
      msg += "===== End Activity "+num+" ======\n\n";
      num++;
   });
   return msg;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...