如何通过循环操作日期选择器获取年初至今(YTD)周度数据
批量下载年初至今(YTD)周日至周六的周度数据
需求
需要批量下载年初至今(YTD)内所有以周日为起始、周六为结束的周度数据,当前手动通过日期选择器输入日期范围获取数据,希望通过循环实现自动化批量下载。
实现方案
利用Python的datetime模块生成目标日期区间列表,结合Selenium循环执行日期填充和下载操作:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from datetime import datetime, timedelta # 初始化浏览器驱动(根据你的浏览器类型调整,比如Chrome/Firefox) driver = webdriver.Chrome() driver.get("你的目标页面URL") # 获取年初日期和当前日期 current_year = datetime.now().year start_of_year = datetime(current_year, 1, 1) today = datetime.now() # 找到年初后第一个周日(如果年初不是周日的话) days_to_first_sunday = (6 - start_of_year.weekday()) % 7 current_sunday = start_of_year + timedelta(days=days_to_first_sunday) # 循环生成周日至周六的日期区间 while current_sunday <= today: current_saturday = current_sunday + timedelta(days=6) # 确保周六不超过今天 if current_saturday > today: current_saturday = today # 格式化日期为DD/MM/YYYY格式 date_range = f"{current_sunday.strftime('%d/%m/%Y')} - {current_saturday.strftime('%d/%m/%Y')}" try: # 等待日期输入框加载并清空原有内容 date_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "/html/body/app-component/app-navigation/div/app-campaign/app-campaign-list-dashboard/div/div/app-filter-bar/div[1]/div/div[2]/div/div[2]/app-time-period-selector/div/div[1]/input")) ) date_input.clear() date_input.send_keys(date_range) # 等待页面数据加载(可根据实际情况调整等待条件,比如等待表格内容更新) WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.XPATH, "/html/body/app-component/app-navigation/div/app-campaign/app-campaign-list-dashboard/div/div/div[5]/cc-report-table-container/div/div[3]/div[2]/cc-drop-up-button/div/div/button")) ) # 点击下载按钮 download_btn = driver.find_element(By.XPATH, "/html/body/app-component/app-navigation/div/app-campaign/app-campaign-list-dashboard/div/div/div[5]/cc-report-table-container/div/div[3]/div[2]/cc-drop-up-button/div/div/button") download_btn.click() # 选择下载选项(这里选第二个选项,根据实际需求调整li的索引) download_option = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "/html/body/app-component/app-navigation/div/app-campaign/app-campaign-list-dashboard/div/div/div[5]/cc-report-table-container/div/div[3]/div[2]/cc-drop-up-button/div/div/ul/li[2]/a")) ) download_option.click() # 等待下载完成(可根据文件大小调整时间,或监控下载目录) WebDriverWait(driver, 20).until(lambda d: True) # 这里可替换为实际的下载完成判断逻辑 print(f"已完成周度数据下载:{date_range}") except Exception as e: print(f"下载周度数据 {date_range} 时出错:{str(e)}") # 进入下一周 current_sunday += timedelta(days=7) # 关闭浏览器 driver.quit()
关键优化点
- 用**显式等待(WebDriverWait)**替代固定
time.sleep(),提升稳定性和效率 - 自动计算年初后第一个周日,确保起始周符合要求
- 处理最后一周可能未到周六的情况(自动以当前日期结束)
- 添加异常捕获,避免单个周出错导致整个程序中断
注意事项
- 替换代码中的
你的目标页面URL为实际访问的页面地址 - 如果日期选择器有弹窗或特殊交互,需要额外处理
- 绝对XPATH容易因页面结构变化失效,建议替换为相对定位(比如结合元素的class属性或文本)
- 可根据需求添加下载文件的重命名逻辑,避免不同周的文件被覆盖
内容的提问来源于stack exchange,提问作者Mustard
相关产品推荐
相关产品推荐

