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

如何通过Selenium WebDriver点击指定data-moment属性的日历元素?

通过data-moment属性定位日历元素并点击

问题描述

我希望把目标日期设成变量,每次用Selenium点击日历面板上对应的元素。这个元素没法用ID、类名定位,只能靠XPath,请问怎么根据指定的data-moment属性值(比如data-moment="2022-10-30")精确定位并点击?

当前我的代码是这样的:

### Gets Edge driver and doesnt need extension update
driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
driver.get(
    'https://teewire.net/granada/'
)
driver.maximize_window()
pause(5)
driver.find_element(By.XPATH,"//*[@id='gz-time-slot-calendar']/ul/li[4]/a").click()
pause(10)

解决方案

直接用XPath的属性匹配语法,把日期做成变量,就能灵活定位不同日期的元素。

具体改法:

  1. 先定义目标日期变量,比如target_date = "2022-10-30"
  2. 写动态XPath,用变量替换固定日期:f"//a[@data-moment='{target_date}']"(要是元素不是<a>标签,比如是li或者div,就把a换成实际标签名)
  3. 用这个动态XPath找元素并点击就行

修改后的代码示例:

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

# 目标日期改成变量,想换日期直接改这里
target_date = "2022-10-30"

# 初始化Edge驱动
driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
driver.get('https://teewire.net/granada/')
driver.maximize_window()
time.sleep(5)  # 建议用time.sleep代替自定义pause,更通用

# 根据data-moment定位点击
try:
    date_element = driver.find_element(By.XPATH, f"//a[@data-moment='{target_date}']")
    date_element.click()
    time.sleep(10)
except Exception as e:
    print(f"找不到元素:{e}")

# 用完记得关驱动
driver.quit()

注意事项

  • 先确认元素标签:打开浏览器F12,看带data-moment属性的元素是啥标签,把XPath里的a换成对应标签名
  • 别用自定义的pause,换成time.sleep更稳妥
  • 加个异常处理,避免找不到元素直接崩程序

内容的提问来源于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 20:15:43