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

如何用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()

代码说明

  1. 先用find_elements获取所有带有BookingCalendar-date--bookable类的容器元素
  2. 遍历每个容器,在每个容器内部查找BookingCalendar-day类的子元素
  3. 将所有找到的日期元素存入统一列表,最后取列表最后一个元素点击,即为最新的可用日期

内容的提问来源于stack exchange,提问作者Emre Birinci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:50:20