如何用Selenium获取同class元素并点击日历最后可用日期
解决日历最新可用日期点击问题
你遇到的问题是因为find_elements返回的是元素列表,不能直接在列表上调用find_elements方法,必须逐个遍历每个可预订日期容器,再在每个容器内查找子元素。以下是修改后的代码,实现获取所有可用日期并点击最后一个:
修改后的核心代码
# 获取所有可预订的日期容器 days_containers = driver.find_elements(By.CLASS_NAME, 'BookingCalendar-date--bookable') # 存储所有可用日期元素 all_available_days = [] # 遍历每个容器,收集内部的日期元素 for container in days_containers: available_days = container.find_elements(By.CLASS_NAME, 'BookingCalendar-day') all_available_days.extend(available_days) # 点击最后一个可用日期(如果存在) if all_available_days: all_available_days[-1].click()
优化版(加入元素等待,避免加载问题)
如果页面加载较慢,建议加入WebDriverWait确保元素加载完成,避免出现空列表的情况:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待所有可预订容器加载完成(最多等10秒) days_containers = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'BookingCalendar-date--bookable')) ) all_available_days = [] for container in days_containers: # 等待当前容器内的日期元素加载 available_days = WebDriverWait(container, 5).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'BookingCalendar-day')) ) all_available_days.extend(available_days) if all_available_days: all_available_days[-1].click()
代码说明
- 先用
find_elements获取所有带有BookingCalendar-date--bookable类的容器元素 - 遍历每个容器,在每个容器内部查找
BookingCalendar-day类的子元素 - 将所有找到的日期元素存入统一列表,最后取列表最后一个元素点击,即为最新的可用日期
内容的提问来源于stack exchange,提问作者Emre Birinci
相关产品推荐
相关产品推荐

