How to pass a function in Puppeteers .evaluate() method?

前端 未结 6 1651
后悔当初
后悔当初 2020-12-08 10:06

Whenever I try to pass a function, like this:

var myFunc = function() { console.log(\"lol\"); };

await page.evaluate(func => {
 func();
 return true;
},          


        
6条回答
  •  醉话见心
    2020-12-08 10:48

    The error is thrown because you execute func(); but func is not a function. I update my answer to answer your updated question:

    Option 1: execute your function in page context:

    var myFunc = function(element) { element.innerHTML = "baz" };
    await page.evaluate(func => {
      var foo = document.querySelector('.bar');
      myFunc(foo);
      return true;
    });
    

    Option 2: pass element handle as arguments

    const myFunc = (element) => { 
        innerHTML = "baz";
        return true;
    }
    const barHandle = await page.$('.bar');
    const result = await page.evaluate(myFunc, barHandle);
    await barHandle.dispose();
    

    `

提交回复
热议问题