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

网络爬虫:Selenium操作无URL/XPath变化的日期选择器如何定位元素

解决方法

问题原因

该站点的日期筛选下拉框属于动态渲染的悬浮层组件,展开后才会插入DOM结构,且不会修改原有触发按钮的路径,你之前使用绝对XPath定位的方式稳定性差,也无法匹配动态生成的下拉选项。

实现代码

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

# 初始化驱动
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
wait = WebDriverWait(driver, 10) # 最长等待10秒,可自行调整

# 打开目标页面
driver.get('https://niftygateway.com/sitewide-activity')

# 等待日期选择按钮可点击后点击展开
date_trigger = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//button[.//span[text()="Right now"]]')
))
date_trigger.click()

# 等待Custom range选项加载后点击
custom_range_opt = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//span[text()="Custom range"]')
))
custom_range_opt.click()

# 选择自定义日期范围示例:11月1日到11月5日
# 先选开始日期11月1日,如果当前显示的不是目标月份,先点击切换月份按钮
# 切换到上一月份示例(需要的话取消注释,多次点击调整到目标月份):
# prev_month_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[contains(@aria-label,"Previous month")]')))
# prev_month_btn.click()

start_date = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//div[contains(@class,"CalendarDay") and @aria-label="November 1, 2023"]') # 年份按需修改
))
start_date.click()

# 再选结束日期11月5日
end_date = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//div[contains(@class,"CalendarDay") and @aria-label="November 5, 2023"]') # 年份按需修改
))
end_date.click()

# 后续可添加确认操作、数据加载等待逻辑
# driver.quit() # 操作完成后关闭驱动

注意事项

  • 代码中使用了显式等待替代time.sleep(),避免网络波动导致元素未加载就触发操作的报错
  • 日期定位依赖aria-label属性,你可以按实际需要修改属性值中的月份、日期、年份即可
  • 如果选择的日期范围跨月,先定位月份切换按钮切换到目标月份,再选择对应日期即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:04