求助:使用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
相关产品推荐
相关产品推荐

