我在处理报表下载和直播补下载时,都需要按指定日期获取数据。这两类流程看起来都是找到日期、点击下载,实际要处理的页面关系并不一样。
报表页面需要操作日历控件,直播列表则需要先找到日期所在的分组,再定位组内的直播记录。这篇结合我的影刀脚本、Codex 排查记录和飞书里的流程说明,分享一下具体做法。
报表脚本通过 dt 接收目标日期,比如 2026-09-10。传入日期就按指定日期处理,没有传入则默认使用昨天。
我之前专门向 Codex 确认过:脚本是不是拿到 dt 后,直接通过 JS 修改页面日期?
对照代码后确认,这部分使用的是 XPath 定位和网页元素点击。脚本会先检查页面当前日期,已经符合目标就跳过选择;需要修改时,再展开日历、切换月份、点击目标日期。
这里有一个容易漏掉的细节:日历除了当月日期,还会显示上月和下月的日期格。只按日期数字定位,可能匹配到不该点击的位置。
目前脚本在定位时,会同时检查完整日期属性、元素是否可见,并排除非当月日期格。如果剩下的匹配结果不唯一,就报错停止,不直接点击第一个。
点击完成后,还要读取页面日期,确认它确实变成了 dt,再执行查询。
传入目标日期
↓
检查页面当前日期
↓
需要修改时,展开日历并切换月份
↓
定位当月的目标日期,确认唯一后点击
↓
核对页面日期
↓
执行查询目标日期是昨天时,脚本会优先尝试页面上的“昨天”快捷项,但同样要检查点击是否生效。
目前代码已经包含跨月处理,不过这份脚本里的新版日历跨月逻辑还没有完成浏览器实测,不能把代码已实现当成所有日期都已验证通过。
直播补下载遇到的是另一种结构:页面按日期分组,每个日期下面有多场直播。
这时只描述“找到日期,再点击直播”不够明确。后面的直播记录必须属于前面找到的日期,否则即使两个元素都定位成功,也可能进入其他日期的场次。
我和 Codex 核对流程时,补充纠正过这层关系,最后整理成了下面的步骤:
外层循环查找目标日期,保存日期所在行的下标。
内层只获取这一行下面的直播记录。
按当前业务规则,选择首场非数字人直播。
进入对应场次,继续执行下载。
补下载版再按日期列表逐个处理。某个日期处理失败时记录日志,然后继续下一个日期。
飞书记录中,日常版和补下载版已经跑通。不过,缺失日期、同一天有多场直播这些情况,仍然需要单独检查,不能只凭一次下载成功判断全部流程都没有问题。
这几项工作里,Codex 主要帮助我阅读脚本、核对参数传递和循环逻辑。比如 dt 最后有没有用于页面选择,日期定位之后是否限定了子元素范围,点击后有没有检查结果。
影刀负责实际执行网页操作和下载。代码解释得是否正确,最终还要对照页面和下载结果确认。
飞书用来保留核对后的流程说明。直播补下载里“先找日期父行,再找行内记录”的关系,已经整理进了文档,后续维护时可以直接查阅。
对于这两类页面,我现在会分别检查:日历里的目标日期是否属于当月、点击后是否生效;分组列表里的下载对象,是否确实属于目标日期所在的那一组。