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

Selenium Python:如何获取特定父类下所有href属性

问题描述

我尝试获取特定父类下的href属性,页面中该类与href重复出现多次。示例HTML结构如下:

enter image description here

目标页面路径:https://www.domain.com.au/sale/toowoomba-qld-4350/?bedrooms=3-any&price=0-600000&excludeunderoffer=1

当前使用的代码只能获取第一个实例,无法拿到所有href:

element = driver.find_element(By.XPATH, "//div[@class='slick-slide slick-active slick-current']")
links = element.find_elements(By.CSS_SELECTOR, "a[href*='https://www.domain.com.au']")
urls = []
for link in links:
    urls.append(link.get_attribute("href"))
    print(urls)
解决方案

问题出在你用了find_element(单数方法)定位父元素,它只会返回第一个匹配的<div class='slick-slide slick-active slick-current'>容器。要获取所有符合条件的父元素,需要改用find_elements(复数方法),再遍历每个父容器提取内部链接:

# 获取所有符合条件的父div元素
elements = driver.find_elements(By.XPATH, "//div[contains(@class, 'slick-slide') and contains(@class, 'slick-active')]")
urls = []
for element in elements:
    # 从每个父元素中提取所有目标链接
    links = element.find_elements(By.CSS_SELECTOR, "a[href*='https://www.domain.com.au']")
    for link in links:
        href = link.get_attribute("href")
        if href not in urls:  # 可选逻辑:去除重复链接
            urls.append(href)
print(urls)

额外提示

  • 用contains(@class, ...)替代精确匹配class,能避免因class属性顺序变化、额外样式类添加导致的匹配失败
  • 如果页面是动态加载的,建议先等待元素加载完成,可使用WebDriverWait实现:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待所有目标父元素加载完成,超时时间10秒
elements = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, "//div[contains(@class, 'slick-slide') and contains(@class, 'slick-active')]"))
)

内容的提问来源于stack exchange,提问作者Clay Burnett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:57:19