我知道如何获取相同 css 类的 DIV 列表,例如
<div class="class1">1</div>
<div class="class1">2</div>
使用xpath
//div[@class='class1']
但是如果一个 div 有多个类怎么办,例如
<div class="class1 class2">1</div>
那么 xpath 会是什么样子?
您要寻找的表达方式是:
//div[contains(@class, 'class1') and contains(@class, 'class2')]
在线有多种 XPath 可视化工具,可以极大地帮助测试任何表达式。
根据这个答案,它解释了为什么确保不包含正在查找的类名的子字符串很重要,正确的答案应该是:
//div[contains(concat(' ', normalize-space(@class), ' '), ' class1 ')
and contains(concat(' ', normalize-space(@class), ' '), ' class2 ')]
有一个有用的 python 包,称为 cssselect。
从 cssselect 导入 CSSSelector CSSSelector('div.gallery').path
生成可用的 XPath:
descendant-or-self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' gallery ')]
与Flynn1179的答案非常相似。
我想这就是你要找的表达方式
//div[starts-with(@class, "class1")]/text()
你也可以这样做:
//div[contains-token(@class, 'class_one') and contains-token(@class, 'class_two')]