Python Selenium:如何查找类名末尾带空格的元素?
解决Selenium中查找多类名元素的问题
问题原因
HTML里的class属性值中的空格是多个类名的分隔符,而非类名的一部分。你写的'ui-table__row table__row--selected '其实对应两个独立的类:ui-table__row和table__row--selected,末尾的空格是多余的(浏览器解析时会忽略)。而By.CLASS_NAME只能匹配单个类名,无法识别带空格的多类名组合,所以找不到元素。
正确解决方案
推荐使用CSS选择器或XPath来匹配同时拥有多个类的元素,其中CSS选择器是最简洁可靠的方式:
方法1:CSS选择器(推荐)
用.连接多个类名,直接匹配同时拥有这些类的元素(不关心类的顺序):
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.ui-table__row.table__row--selected')))
注意:这里的类名之间没有空格,空格在CSS里表示后代元素,不要混淆。
方法2:XPath
如果偏好XPath,可以选择灵活匹配或精确匹配:
- 灵活匹配(只要包含两个类即可,不限制顺序和其他类):
element = wait.until(EC.presence_of_element_located((By.XPATH, "//*[contains(@class, 'ui-table__row') and contains(@class, 'table__row--selected')]")))
- 精确匹配(仅当元素的class属性值完全是这两个类时生效,顺序不能变):
element = wait.until(EC.presence_of_element_located((By.XPATH, "//*[@class='ui-table__row table__row--selected']")))
额外提示
- 永远不要在类名里保留多余的空格,浏览器会自动忽略class属性首尾的空格,原代码里末尾的空格是无效的,直接去掉即可。
- 当需要匹配多个类时,CSS选择器是Selenium官方推荐的更高效的方式,执行速度通常比XPath更快。
内容的提问来源于stack exchange,提问作者SalGi
相关产品推荐
相关产品推荐

