学科网课件管理
账号与凭据
- 账号:13800000000(XX中学教师账号 teacher01),存于用户环境变量 ZXXK_ACCOUNT
- 密码:仅存于用户环境变量 ZXXK_PASSWORD。密码绝不写入本技能文件、长期记忆或任何交付物
读取凭据(按顺序尝试)
- 进程环境变量
ZXXK_ACCOUNT/ZXXK_PASSWORD(os.environ 或 echo) - 进程中不可见时(宿主进程先于变量写入启动,实测常见),从注册表直读,始终可靠(2026-09-09 实测:setx 后当前会话进程环境变量仍为旧值,注册表才是最新):
import winreg
k = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Environment")
account = winreg.QueryValueEx(k, "ZXXK_ACCOUNT")[0] # 无此值则用技能内账号 13800000000
password = winreg.QueryValueEx(k, "ZXXK_PASSWORD")[0] # 抛错说明未设置
- 两者都取不到密码 → ask_user_question 请用户接管浏览器手动登录,或提示用户运行
setx ZXXK_PASSWORD "密码"后重试
登录策略
- 先查登录态再登录(隔天/久未使用时):browser 打开任一 soft 详情页,检查页面是否含用户名/头像(已登录态)——已登录则直接干活,未登录才走登录流程,避免不必要的重复登录触发风控
- zxxk.com 会话失效时:读取凭据用 browser 技能自动填入登录(账号为手机号+密码登录)
- 出现验证码/短信验证/安全挑战:停止自动尝试,ask_user_question 请用户接管
- 密码错误处理链(2026-09-09 实战定型):登录报「用户名或密码错误」→ 不要重试旧密码 → ask_user_question 向用户要新密码 → 自动登录验证 → 验证通过后立即
setx ZXXK_PASSWORD "新密码"更新注册表(同时用 winreg 验证写入成功)→ 继续任务。切勿用旧密码连续试错(触发风控的主因) - 风控恢复路径:已触发短信验证+点选验证码+「最近异常」提示后,请用户手动登录一次即可解除,之后风控放松一阵,无需其他处理
- 会员:网校通(高中+初中高端),2027-01-30 到期
下载额度保护
- 网校通有下载额度限制:每次下载前必须列出候选清单让用户确认,未经确认不执行下载
硬性筛选规则
按顺序过滤检索结果,不符合前两条的直接排除:
- 教材版本必须为人教版(2019)
- 发布时间必须在最近 4 年内
- 优先选择偏好作者(下列顺序即优先级):
- 飞哥物理研究站
- 鼎力物理(鼎力课堂)
- 物里悟理不雾里
- FEIGE物理
- 点石成金
- 同一资源多个来源时:偏好作者 > 下载量/评分 > 最近更新
- 无偏好作者可选时,按下载量+评分+更新时间综合挑选,候选列表中标注「非偏好作者」提醒用户
标准工作流
用户提出课件需求(如"下载选必一 4.1 光的折射的课件")后:
- 定位章节:解析 册 → 章 → 节;节名不确定时查 references/pep-physics-tree.md(人教版2019六册126节全表,含易错节名)。
册名缩写映射:必修一/必修第一册、必修二/必修第二册、必修三/必修第三册、选必一/选择性必修第一册、选必二/选择性必修第二册、选必三/选择性必修第三册(用户口语常用缩写,自动展开) - 检索:读取 browser 技能,打开 zxxk.com 站内搜索(关键词组:章节名 + 课件 + 人教版,如"光的折射 课件");站内搜索后用类型「课件」+「精品」双筛选,候选立即收敛到个位数(用户 2026-09-09 经验);search 工具结果不足时也直接用 browser 站内检索。遇登录墙/验证码 → ask_user_question 请用户接管
- 筛选:按硬性筛选规则过滤,取 3–5 个候选
- 确认:ask_user_question 列出候选(作者 / 更新日期 / 大小 / 页数 / 是否偏好作者),用户选定后才开始下载
- 下载(requests 直链法,2026-09-09 实测定型;浏览器直接下载不落盘,勿用):
- 详情页点「免费下载」前先scrollIntoView让按钮入视(防点击无效);按钮#btnSoftDownload;网校通权益确认弹窗藏在 about:blank iframe 中(layui-layer-iframe),遍历document.querySelectorAll('iframe')的 contentDocument 找「确认」按钮点击
- 跳转soft/softdownload?softid={id}后,#retry_download的 href 即 ShowDownLoadView 中转链接,#downloadframeiframe 的 src 即 files.zxxk.com 直链(可直接 requests 下载)
- cookie 提取:execute_script("return document.cookie")返回值带前缀「execute_script 成功:\n」,必须 strip 后再解析成 dict,否则 requests 报 latin-1 编码错;之后 requests 带该 cookie 流式下载直链
- 原始文件名:从详情页re.search(r"<title>(.*?)</title>", resp.text)提取(下载直链的 URL 文件名无意义,勿用);归档重命名用 title + 扩展名
- 分类型验证:pptx → python-pptx 打开验证页数与详情页一致;pdf → PyPDF2/pypdf 打开验证页数;docx → python-docx 打开验证段落数;zip → 解压测试。验证失败(文件损坏/大小异常)则检查下载记录页是否已扣券,把扣券情况告知用户,必要时同一 softid 重走一遍下载流程(凭证还在则不重复扣)
- 若点击免费下载后无反应(URL 不跳转):说明弹窗未被触发、服务器未生成下载凭证,回到详情页重走完整流程(scrollIntoView → 点击 → iframe 确认) - 归档:读取 wps-docs 技能,用 drive upload-file 的
--location "教学工作文件/物理课件/下载原版/{册}/{章}/{节}"直接落位(目录树已全量建好,126 节空目录俱在) - 汇报:文件名 + 归档路径 + 云文档链接;交付防混淆规则(2026-09-09 实训教训):多套课件发给用户时——
- 交付副本文件名统一加「序号_作者」前缀(如「1_飞哥_…」「2_鼎力_…」「3_物里悟理_…」),云盘归档仍保持原始文件名;站点原始命名常高度相似(只差「培优」二字)或章节号混乱(2.1 内容却叫「1. …」),直接用原名发送极易看漏看混
- 文件名高度相似的多文件分多次发送(每次一条消息一个文件),避免 IM 端被折叠或漏展示
- 发送后文字回复列出核对清单(序号+作者+页数+大小),请用户按套数核对
归档规则
| 资源类型 | 云盘位置 | 命名 |
|---|---|---|
| 学科网下载原版 | 下载原版/{册}/{章}/{节} | 保持原始文件名不动 |
| 用户修改后成品 | 我的课件/{册}/{章} | 原名 +【简化】或【极简】后缀 |
| 自编题集/教案 | 我的课件/{册}/{章} | 自定义命名 |
| 非教材关联资源 | 其他/ | 自定义命名 |
- 目录树 2026-09-08 已全量建好;若目标目录缺失(如其他学科或新建章节),先按同样「册/章/节」结构创建再归位
- 用户要求下载多个课件时:逐个确认候选 → 统一下载归档 → 最后一次性汇报清单
注意事项
- 云盘删除规则(全局):需要删除的云盘文件一律用 drive move-file 转移到云盘根目录「待删除」目录(file_id: mFR6YgKmo1M7V9CEE3sAxxYJyULNc54YW),不做任何删除操作,由用户手动清空;重传/替换旧版时同样把旧版移入该目录
- 只通过账号权限内正常下载,禁止任何绕过付费/权限校验的行为
- 防风控(2026-09-09 实训):密码错误+高频点击+多页跳转曾触发短信验证+点选验证码+「最近异常」三重拦截。操作要放慢节奏:页面跳转留 1-2s 间隔、登录失败不立即连续重试、登录成功后不反复测试登录态
- 学科网页面结构可能变化,browser 操作以实际页面为准;搜索优先用站内搜索框
- 大文件(>100MB)下载耗时较长,提前告知用户预计耗时
- 下载的课件如需修改精简(去页、压缩图片、放大习题字号、消除截断与留白),改用 ppt-simplifier 技能——【简化】裁剪惯例、版式参数模型、WPS 渲染验收流程与工具链陷阱对策均在那里维护,本技能只负责下载与归档,不重复维护简化规则