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

如何使用Playwright选择嵌套HTML元素并提取动态随机ID下的目标文本列表

修正后可直接运行的代码(适配Playwright定位逻辑)

# 先定位到外层ufi开头的父容器
ufi_container = page2.query_selector(f'xpath=//div[starts-with(@id, "ufi_")]')
target_texts = []
if ufi_container:
    # 精准匹配每个动态id文章容器下的第二个子div(目标文本所在位置)
    comment_nodes = ufi_container.query_selector_all('div >> div:nth-child(2)')
    for node in comment_nodes:
        text = node.text_content().strip()
        if text:
            target_texts.append(text)
print(target_texts)

原代码出错核心原因

  • 你写的div>>//div[1]会匹配所有后代层级的第一个div,和你要的目标元素完全错位
  • 硬靠div[5]按索引定位稳定性极差,只要前端新增任意空div结构就会失效

优化点说明

  • 用starts-with(@id, "ufi_")不需要提前拼接动态page_id,只要id前缀固定就能匹配,完美适配动态id场景
  • 直接用nth-child(2)精准命中每个文章div下的第二个子元素,不会乱匹配其他层级的div
  • 新增strip()过滤空白字符,避免拿到多余的换行、空格

可选纯xpath写法(效果一致)

如果article_id有固定前缀可以用这个写法,没有前缀的话删掉[starts-with(@id,"article_")]即可:

target_nodes = page2.query_selector_all(f'xpath=//div[starts-with(@id,"ufi_{page_id}")]//div[starts-with(@id,"article_")]/div[2]')
target_texts = [node.text_content().strip() for node in target_nodes if node.text_content().strip()]

内容的提问来源于stack exchange,提问作者Huang Kuan Wei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:15:04