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

Selenium如何筛选仅含单类名元素 排除带附加类的同名元素

Selenium的find_elements_by_class_name方法为包含匹配规则,只要元素的class属性中存在指定类名就会被命中,所以同时携带ads-title、ads-year两个类的元素也会被返回。

以下是三种可直接使用的解决方案:

方案1:使用CSS选择器定位(推荐)

规则1:完全匹配class属性仅为ads-title的元素

直接校验class属性的完整值,完全符合才会被选中:

driver = webdriver.Chrome(r"./chromedriver")
driver.get('https://mashinbank.com/%D8%AE%D8%B1%DB%8C%D8%AF-%D8%AE%D9%88%D8%AF%D8%B1%D9%88')
# 替换原有class定位为css选择器定位
names = driver.find_elements_by_css_selector("div[class='ads-title']") 
for name in names:
    print(name.text)

规则2:排除携带ads-year类的元素

如果后续可能有其他类加在ads-title元素上,仅需要排除带ads-year的元素,可以用:not伪类实现:

names = driver.find_elements_by_css_selector("div.ads-title:not(.ads-year)")

方案2:使用XPath定位

和CSS选择器逻辑一致,两种匹配规则对应代码如下:

# 完全匹配class属性仅为ads-title
names = driver.find_elements_by_xpath("//div[@class='ads-title']")

# 匹配含ads-title且不含ads-year的元素
names = driver.find_elements_by_xpath("//div[contains(@class,'ads-title') and not(contains(@class,'ads-year'))]")

方案3:对查询结果二次过滤

如果不想修改原有定位逻辑,可以拿到所有元素后做属性过滤:

driver = webdriver.Chrome(r"./chromedriver")
driver.get('https://mashinbank.com/%D8%AE%D8%B1%DB%8C%D8%AF-%D8%AE%D9%88%D8%AF%D8%B1%D9%88')
names = driver.find_elements_by_class_name('ads-title') 
for name in names:
    # 过滤掉包含ads-year类的元素
    if 'ads-year' not in name.get_attribute('class'):
        print(name.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:03