如何使用 .$$eval 函数

Sha*_*ayN 4 eval puppeteer

我正在尝试运行此代码:

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

但我收到一个错误。

因此,我尝试打印“列表”中的项目(因为我认为问题出在那里),我尝试了以下代码:

var aaa = await page.$$eval(selector, list => list);
Run Code Online (Sandbox Code Playgroud)

我收到“aaa”是空的。

知道可能是什么问题吗?

Gra*_*ler 14

您正在尝试从 返回 DOM 元素page.$$eval(),这将返回,undefined因为 DOM 元素不可序列化

page.$$()如果您想返回一个ElementHandle数组,请尝试使用。

看看在木偶文档page.$$eval()以下:

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

此方法Array.from(document.querySelectorAll(selector))在页面内运行并将其作为第一个参数传递给pageFunction

如果pageFunction返回Promisepage.$$eval则将等待承诺解决并返回其值。

例子:

const divsCounts = await page.$$eval('div', divs => divs.length);
Run Code Online (Sandbox Code Playgroud)


goo*_*yun 8

只需尝试将您的数组映射到更可序列化的数组。

例如:

const links = await page.$$eval('h1 > a', e=>e.map((a)=>a.href))
Run Code Online (Sandbox Code Playgroud)