如何通过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的属性匹配语法,把日期做成变量,就能灵活定位不同日期的元素。
具体改法:
- 先定义目标日期变量,比如
target_date = "2022-10-30" - 写动态XPath,用变量替换固定日期:
f"//a[@data-moment='{target_date}']"(要是元素不是<a>标签,比如是li或者div,就把a换成实际标签名) - 用这个动态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
相关产品推荐
相关产品推荐

