Selenium Python:如何获取特定父类下所有href属性
问题描述
我尝试获取特定父类下的href属性,页面中该类与href重复出现多次。示例HTML结构如下:
目标页面路径: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
相关产品推荐
相关产品推荐

