Puppeteer page.evaluate querySelectorAll return empty objects

前端 未结 3 1924
清酒与你
清酒与你 2020-12-10 11:38

I am trying out Puppeteer. This is a sample code that you can run on: https://try-puppeteer.appspot.com/

The problem is this code is returning an array of empty obje

3条回答
  •  北荒
    北荒 (楼主)
    2020-12-10 12:22

    Problem:

    The return value for page.evaluate() must be serializable.

    According to the Puppeteer documentation, it says:

    If the function passed to the page.evaluate returns a non-Serializable value, then page.evaluate resolves to undefined. DevTools Protocol also supports transferring some additional values that are not serializable by JSON: -0, NaN, Infinity, -Infinity, and bigint literals.

    In other words, you cannot return an element from the page DOM environment back to the Node.js environment because they are separate.

    Solution:

    You can return an ElementHandle, which is a representation of an in-page DOM element, back to the Node.js environment.

    Use page.$$() to obtain an ElementHandle array:

    let list = await page.$$('.title');
    

    Otherwise, if you want to to extract the href values from the elements and return them, you can use page.$$eval():

    let list = await page.$$eval('.title', a => a.href);
    

提交回复
热议问题