You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Puppeteer的evaluate/eval方法创建对象或关联数组

解决Puppeteer生成指定键值对对象的问题

你当前用map返回的是含对象的数组,而要实现{键: 文本值}的结构,不能用map,得用Array.reduce()遍历元素构建目标对象。你的错误代码箭头函数参数写法完全不符合语法规范,map的回调参数只能是单个元素,无法直接在这里定义键名。

正确实现代码

const kefs = await page.$$eval('div[data-event-treeid]', (msgs) => 
  msgs.reduce((acc, msg) => {
    const key = msg.getAttribute('data-event-treeid');
    acc[key] = msg.innerText;
    return acc;
  }, {}) // 初始值设为空对象
);
console.log('kefs', kefs);

代码说明

  • 用reduce替代map:reduce可以遍历数组,把每个元素的处理结果累加到初始空对象中
  • 每次循环取出当前元素的data-event-treeid作为键,innerText作为对应值,添加到累加对象acc里
  • 最终返回的就是你需要的{ "111": "Sometext", "222": "SomeOtherText" }结构

特殊情况处理

如果存在多个元素拥有相同的data-event-treeid值,后面的元素会覆盖前面的(因为对象键唯一)。若要保留所有对应文本,可把值设为数组:

const kefs = await page.$$eval('div[data-event-treeid]', (msgs) => 
  msgs.reduce((acc, msg) => {
    const key = msg.getAttribute('data-event-treeid');
    if (!acc[key]) acc[key] = [];
    acc[key].push(msg.innerText);
    return acc;
  }, {})
);

内容的提问来源于stack exchange,提问作者Max Krok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:07:11