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

Selenium XPath如何合并span文本匹配包含指定子串的li元素

解决方案

XPath实现方式

你之前的写法失效是因为text()只会匹配li节点的直接文本子节点,不会自动合并后代span元素的文本内容。你可以使用string()和normalize-space()函数拼接节点所有后代文本后再匹配,写法如下:

//li[contains(normalize-space(string(.)), 'Addressing machine wholesaling')]

说明:

  • string(.)会将当前li节点的所有后代文本内容拼接为单个字符串
  • normalize-space()会自动去除字符串首尾空白,同时将中间的换行、多空格等连续空白符替换为单个空格,避免元素排版产生的空白干扰匹配

如果需要更精准的定位,可加上父级ul的属性限制,避免匹配到其他列表的元素:

//ul[contains(@class, 'anzsicList')]/li[contains(normalize-space(string(.)), 'Addressing machine wholesaling')]

以上写法兼容XPath 1.0,所有Selenium支持的浏览器环境都可以直接使用。

非XPath替代方案

如果不想写复杂XPath,也可以用CSS选择器加遍历匹配的方式实现:

  • 先用CSS选择器获取目标列表下的所有li元素
  • 遍历每个li元素,调用Selenium元素的text属性(该属性会自动合并所有后代文本并格式化空白),匹配到目标文本后停止遍历即可

Python示例代码:

from selenium.webdriver.common.by import By

target = "Addressing machine wholesaling"
li_list = driver.find_elements(By.CSS_SELECTOR, "ul.anzsicList.probable li")
target_li = None
for li in li_list:
    if target in li.text:
        target_li = li
        break
# 后续直接操作target_li即可

该方案可读性更高,对于文本动态变化的场景适配性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:02