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

Python Selenium如何通过文本定位并点击XPath随机的按钮

实现方案

方案1:匹配父元素属性(优先推荐)

你提供的元素结构中,外层time-slot类的div直接携带了data-slottime属性,属性值和目标时间文本完全一致,匹配属性比匹配文本更稳定,不受文本格式、空格、结构变动影响,代码可以直接动态适配不同时间段:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def click_time_slot(driver, target_time: str, wait_timeout: int = 10):
    # 动态构造匹配属性的XPath
    target_xpath = f"//div[@class='time-slot' and @data-slottime='{target_time}']"
    # 等待元素可点击,避免加载未完成报错
    time_slot_elem = WebDriverWait(driver, wait_timeout).until(
        EC.element_to_be_clickable((By.XPATH, target_xpath))
    )
    time_slot_elem.click()

# 调用示例
# 点击5点时段
click_time_slot(driver, "at 5:00 PM")
# 点击1点时段
click_time_slot(driver, "at 1:00 PM")

方案2:匹配子元素文本

如果需要直接匹配显示的文本内容,可以使用normalize-space()处理文本前后的隐形空格,提升匹配成功率:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def click_time_slot_text(driver, target_time: str, wait_timeout: int = 10):
    target_xpath = f"//div[@class='time-slot-data-line' and normalize-space(text())='{target_time}']"
    time_slot_elem = WebDriverWait(driver, wait_timeout).until(
        EC.element_to_be_clickable((By.XPATH, target_xpath))
    )
    time_slot_elem.click()

常见问题处理

如果点击时报元素遮挡、不可交互的错误,可以把点击逻辑替换为JS执行点击,绕过前端交互限制:

# 替换 time_slot_elem.click() 为以下代码
driver.execute_script("arguments[0].click();", time_slot_elem)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:24:03