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

求助:使用Playwright从含大量<div>标签的页面提取<product-key-value>下<span>标签的数据到数组

求助:使用Playwright从含大量
标签的页面提取下标签的数据到数组

嘿,我来帮你搞定这个问题!你说想用Playwright把页面里<product-key-value>标签下的所有<span>内容提取成数组,之前的代码没起效,我先帮你分析下问题所在,再给几个靠谱的解决方案。

首先看你写的代码,第一个可能的坑是定位器写错了:你用了//div[@class="product-key-value"],但你的目标是自定义标签<product-key-value>,不是class名叫这个的div!这就导致你根本没定位到正确的父元素,后续的span自然也拿不到。

接下来给你几个修正后的可行方案:

方案一:最简洁的直接提取法

用Playwright locator的all_text_contents()方法,一步到位拿到所有span的文本数组:

# 直接定位所有<product-key-value>下的span元素
spans_locator = page.locator('product-key-value span')
# 获取所有span的文本内容,返回就是数组
data_array = spans_locator.all_text_contents()
print(data_array)

方案二:更灵活的逐元素处理

如果你需要对每个<product-key-value>下的span做单独处理(比如过滤空文本、或者关联其他数据),可以用all()遍历父元素:

# 先拿到所有<product-key-value>元素
product_items = page.locator('product-key-value').all()
data_array = []

for item in product_items:
    # 提取当前item下所有span的文本
    span_texts = item.locator('span').all_text_contents()
    # 把当前item的span内容加入总数组,也可以按需做过滤
    data_array.extend([text for text in span_texts if text.strip()])

print(data_array)

额外提示:处理动态加载的情况

如果页面是异步加载的,记得先等元素加载完成再提取,避免拿空数据:

spans_locator = page.locator('product-key-value span')
# 等待至少一个span元素出现,确保页面加载完毕
spans_locator.wait_for()
data_array = spans_locator.all_text_contents()

你之前找的那些类似解决方案没效果,主要是因为它们针对的是div、dd这类常规标签,和你这个自定义标签的场景匹配度不高,核心还是要先把父元素的定位器写对~

备注:内容来源于stack exchange,提问作者AnastasWu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:18:06