Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

puppeteer - How to use .$$eval function

I'm trying to run this code:

var aaa = await page.$$eval(selector, list => (list, value) => 
    {
        return resolve(list.find(element => element.textContent === value));
    }
    ,value);

But I received an error.

Therefore, I tried to print the items in "list" (because I assumed that the problem is there), I tried this code:

var aaa = await page.$$eval(selector, list => list);

And I received that "aaa" is empty.

Any idea what may be the problem?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You are attempting to return DOM elements from page.$$eval(), which will return undefined because DOM elements are not serializable.

Try using page.$$() instead if you would like to return an ElementHandle array.

Take a look at the Puppeteer Documentation for page.$$eval() below:

page.$$eval(selector, pageFunction[, ...args])

This method runs Array.from(document.querySelectorAll(selector)) within the page and passes it as the first argument to pageFunction.

If pageFunction returns a Promise, then page.$$eval would wait for the promise to resolve and return its value.

Examples:

const divsCounts = await page.$$eval('div', divs => divs.length);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...