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

如何通过循环操作日期选择器获取年初至今(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:45:29