如何使用`. $$eval`函数

10

我正在尝试运行这段代码:

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

但我收到了一个错误。

因此,我尝试打印“list”中的项目(因为我认为问题可能在那里),我尝试了这段代码:

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

我收到了“aaa”是空的。

你有任何想法可能是什么问题吗?


4
你收到了什么错误信息? - Shai
除了你收到的错误之外,你应该扩大上下文。你能否扩展你的代码示例并使其更具体化? - Carsten
1
你尝试过类似以下的代码吗: await page.$$eval('li', (list, value) => list.find(e => e.innerText === value), val) - Yaniv Efraim
2个回答

28

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

如果您想返回ElementHandle数组,请改用page.$$()

请查看下面关于page.$$eval()Puppeteer文档

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);

11

尝试将您的数组映射到更易序列化的数组。

例如:

const links = await page.$$eval('h1 > a', e=>e.map((a)=>a.href))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接