




本文详解如何使用 xpath 精确匹配具有 `class` 属性(且其值**不包含指定子字符串**,如 `"mobilewrapper"`)的元素,避免误选无 `class` 属性的节点,并给出可直接复用的表达式与实践要点。
在自动化测试(如 Selenium)、网页抓取(如 Scrapy、lxml)或浏览器开发者工具中,常需基于动态生成的 CSS 类名进行定位。例如,框架(如 Styled Components)会生成类似 styled__MobileWrapper-sc-mljlp8-0 jnegik 的类名,其中仅 MobileWrapper 是稳定可识别的语义部分,其余为哈希后缀,不可预测。
此时,若使用 //div[not(contains(@class, 'MobileWrapper'))],看似合理,实则存在逻辑漏洞:该表达式会同时匹配两类 div:
✅ 正确解法是先确保 class 属性存在,再对其值做子字符串判断。推荐 XPath 表达式如下:
//div[@class and not(contains(@class, 'MobileWrapper'))]/div[@data-testid='product-container']
该表达式分步解析:
? 对应你的 HTML 结构,此 XPath 将准确匹配:

⚠️ 注意事项:
总结:关键在于用 @class 作为存在性断言,再嵌套 not(contains(...)) 进行内容过滤——这是处理动态类名、实现“排除特定语义组件”的标准 XPath 范式。