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

如何使用Python在Selenium中遍历元素并实现预订逻辑?

Selenium元素遍历实现高尔夫时段预订逻辑

需求说明

  • 用for循环筛选所有早于特定时间的时段标题(panel titles)
  • 判断对应时段是否有4名高尔夫球手
  • 满足条件时点击该时段的预订按钮

现有代码问题

你已经能选中目标日期,但遍历元素的XPath存在语法错误(@class='{'panel-heading'}'写法不符合规范),且未完成时间筛选、人数校验和预订点击的核心逻辑。

修正后完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import EdgeService
import time

def pause(seconds):
    time.sleep(seconds)

# 初始化Edge驱动
driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
driver.get('https://teewire.net/granada/')
driver.maximize_window()
pause(2)

# 选择目标日期
target_date = "2022-10-30"
driver.find_element(By.XPATH, f"//*[@id='gz-time-slot-calendar']//a[@data-moment='{target_date}']").click()
pause(5)

# 定义时间阈值(示例:筛选早于10:00的时段)
target_time = "10:00"

# 获取所有时段面板容器
time_slot_panels = driver.find_elements(By.XPATH, "//*[@id='time-slots-container-id']//div[contains(@class, 'panel')]")

for panel in time_slot_panels:
    # 提取时段标题
    panel_title = panel.find_element(By.XPATH, ".//a[@class='panel-heading']").text.strip()
    # 拆分出时间部分(假设标题格式为"HH:MM 附加内容")
    slot_time = panel_title.split()[0]
    
    # 判断时段是否早于目标时间
    if slot_time < target_time:
        # 获取当前时段的球手人数(需根据实际HTML结构调整XPath)
        golfer_count = panel.find_element(By.XPATH, ".//span[contains(@class, 'gz-players-count')]").text.strip()
        # 校验人数是否为4
        if golfer_count == "4":
            # 点击预订按钮(根据实际页面按钮文本/属性调整)
            book_button = panel.find_element(By.XPATH, ".//button[contains(text(), 'Book')]")
            book_button.click()
            print(f"已预订时段:{panel_title}")
            # 若只需预订第一个符合条件的时段,可添加break退出循环
            # break

driver.quit()

关键逻辑说明

  1. XPath修正:将错误的@class='{'panel-heading'}'改为标准写法@class='panel-heading',同时通过遍历父面板容器,更方便关联时段的标题、人数和按钮。
  2. 时间筛选:拆分时段标题提取时间字符串,直接用字符串比较(需确保时间格式为HH:MM,如09:30)。
  3. 人数校验:根据你提供的HTML截图结构,定位显示球手人数的元素,若页面结构有变化需对应调整XPath。
  4. 预订触发:在当前时段面板内定位预订按钮,确保点击的是对应时段的按钮。

优化建议

  • 替换pause()为显式等待,避免因页面加载慢导致元素定位失败:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 示例:等待时段容器加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "time-slots-container-id"))
    )
    
  • 若页面元素的class或文本有变动,需同步调整对应的XPath定位规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07