Selenium调用find方法返回空列表但页面实际存在对应元素问题求助
定位失败的核心原因
Selenium 提供的find_elements_by_class_name方法仅支持传入单个类名,你传入的card-item js-product-data是两个独立的类名,中间的空格是类名分隔符,该方法会把整个字符串当做一个包含空格的类名去匹配,页面中不存在对应类名的元素,所以会返回空列表或抛出找不到元素的异常。
XPath可正常定位的原因
XPath 的匹配规则支持多类名组合校验:
- 如果你用的是全量匹配写法
//*[@class='card-item js-product-data'],会直接匹配class属性值完全等于该字符串的元素 - 如果你用的是多条件匹配写法
//*[contains(@class,'card-item') and contains(@class,'js-product-data')],会匹配同时包含两个类名的元素
两种写法都符合你的定位需求,所以可以正常找到目标元素。
其他可选的正确定位方式
你也可以用CSS选择器实现同样的多类名定位,写法更简洁:
products = items.find_elements(By.CSS_SELECTOR, '.card-item.js-product-data')
注意:类名前加.,多个类名之间直接拼接不需要加空格
内容的提问来源于stack exchange,提问作者Dragos Ciupe
相关产品推荐
相关产品推荐

