首页 > 解决方案 > puppeteer page.evaluate() 的返回值

问题描述

所以,我有一个函数返回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);
       });
}

我试图从 打印msgnextFunction()但它只打印Test:

我试图实现的是:msg从返回值获取结果或分配变量nextFunction()

有没有解决方案或更好的方法来做到这一点?

标签: javascriptnode.jspuppeteer

解决方案


  1. 要获得更简洁的代码和更轻松的故障排除,请选择一条通道,异步/等待或与then. 两者都使用会使代码难以阅读。async/await 更易读,错误处理更简单。在这里阅读更多
  2. 要在 中查看console.log,请evaluate收听“控制台”事件:
const page = await browser.newPage();
page.on('console', msg => console.log(msg.text()));
  1. page.evaluatecontext 与 Puppeteer 是分开的,所以评估的msg将是undefined. 移动msg进行评估,然后将结果返回给 puppeteer。
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;
});

推荐阅读