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

使用Puppeteer从多个列表项中分别提取两个子span的文本值

解决方案

你可以直接在evaluate回调内部通过DOM API获取当前<a>标签下的两个子<span>内容,一次性返回你需要的两个字段,这种方式通信次数少,执行效率更高:

for(let i = 0; i < itemArray.length; i++){
    const { itemName, itemCount } = await itemArray[i].evaluate(el => {
        // 在浏览器侧直接查询当前a标签的子元素
        const nameSpan = el.querySelector('span:not(.small_number_block)')
        const countSpan = el.querySelector('span.small_number_block')
        return {
            itemName: nameSpan.textContent.trim(),
            itemCount: countSpan.textContent.trim()
        }
    })
    // 按要求格式输出
    console.log(`Item Name: ${itemName}`)
    console.log(`Item Count: ${itemCount}\n`)
}

如果你偏好从Node.js侧通过选择器查询子元素,需要调用元素实例的$方法(而不是全局的page.$$),$方法的查询范围仅限当前元素的子节点:

for(let i = 0; i < itemArray.length; i++){
    // 从当前a元素下查询子span,而非全局查询
    const nameEl = await itemArray[i].$('span:first-child')
    const countEl = await itemArray[i].$('span.small_number_block')
    const itemName = await nameEl.evaluate(el => el.textContent.trim())
    const itemCount = await countEl.evaluate(el => el.textContent.trim())
    console.log(`Item Name: ${itemName}`)
    console.log(`Item Count: ${itemCount}\n`)
}

错误原因说明

你之前写法不生效是因为page.$$是从整个页面的根节点开始查询,无法限定在你遍历到的对应<a>标签范围内,自然没法匹配到目标子元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:18:03