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

尝试XPath选择启用状态div失败,求可行实现方案?

解决方案

1. 使用CSS选择器(推荐)

CSS选择器在类匹配上更简洁精准,直接排除禁用类即可:

/* 匹配包含目标类、排除禁用类,且文本为Intraday的div */
div.buySellOrder_bso21ProductOption__9UpPt:not(.buySellOrder_bso21MisDisabled__86CjY):contains(Intraday)

如果你的环境不支持:contains()伪类(比如部分爬虫工具),可以先匹配类,再通过文本过滤:

div.buySellOrder_bso21ProductOption__9UpPt:not(.buySellOrder_bso21MisDisabled__86CjY)

2. 改进XPath表达式

原XPath的contains(@class)可能因类名的空格/顺序问题导致误匹配,改用完整类名匹配的方式:

//div[
  contains(concat(' ', normalize-space(@class), ' '), ' buySellOrder_bso21ProductOption__9UpPt ')
  and not(contains(concat(' ', normalize-space(@class), ' '), ' buySellOrder_bso21MisDisabled__86CjY '))
  and normalize-space(text()) = 'Intraday'
]
  • concat(' ', normalize-space(@class), ' '):给处理后的类列表前后加空格,确保匹配的是完整类名,避免部分类名重叠导致的误判
  • normalize-space(text()):去除文本前后的空格,精准匹配"Intraday"

3. XPath 2.0+ 专用写法(支持时使用)

如果你的环境支持XPath 2.0及以上,用tokenize拆分类列表更可靠:

//div[
  some $class in tokenize(@class, '\s+') satisfies $class = 'buySellOrder_bso21ProductOption__9UpPt'
  and not(some $class in tokenize(@class, '\s+') satisfies $class = 'buySellOrder_bso21MisDisabled__86CjY')
  and normalize-space(text()) = 'Intraday'
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:35:31