yejychina 儿童发展平台 · Kimi WebBridge 上传器
把一个孩子文件夹里按学号命名的作品图(如 01.jpg、02.jpg…),通过 Kimi WebBridge 自动上传到 yejychina.com 儿童发展平台的对应幼儿记录里,并自动:加入成长册 + 家长可见。
这是基于已跑通的生产流程封装:对多名幼儿、按学号命名的作品图,用本技能依次上传全部成功。
前置条件(必须满足)
- Kimi WebBridge daemon 正在运行:
http://127.0.0.1:10086/command
- 未运行则先启动:~/.kimi-webbridge/bin/kimi-webbridge start - Chrome 扩展「Kimi WebBridge」已安装并连接(守护进程
status显示extension_connected: true) - Chrome 扩展已开启「Allow access to file URLs」:
- 打开chrome://extensions→ Kimi WebBridge → 详情 → 打开「Allow access to file URLs」
- 否则upload工具会报upload needs Chrome's per-extension file access - 用户已在浏览器里登录 yejychina.com(儿童发展平台教师账号),且登录态有效(平台每 5 分钟检测登录,超时会跳回首页)
- 本技能脚本依赖
curl与 Kimi WebBridge 的navigate/evaluate/upload/screenshot工具
工作原理
平台「发布动态」是一个 layui 弹窗(内嵌于 #detail_iframe 的 iframe)。关键难点是:WebBridge 的 upload 工具只能作用于主页面元素,而 layui 的完整表单逻辑(data_ary → upload() → BOS/中转上传 → submit())在弹窗 iframe 里。
已探明的可靠路径(规避该限制):
打开学生档案页 student_detail?uid=XXX
→ 点 img.add 打开 layui 弹窗(上传 iframe 出现)
→ 主页面建隐藏 input#wb_staging_file,WebBridge upload 设真实文件
→ 把 staging 文件注入到弹窗 iframe 的 #upload_image + 往 data_ary.push
→ 强制 cookie upload_way=server(走服务器中转 serverbce_sdk,不依赖 BOS 客户端)
→ 调 iframe.upload() → 文件上传成功 → upload_data.push(URL)
→ 自动 submit() 发布
→ 跳回档案页核对新增记录
目录结构
yejychina-kimi-uploader/
├── SKILL.md
└── scripts/
├── upload_one.py # 单孩子上传(navigate→开弹窗→填字段→传图→发布→核对)
└── batch_upload.py # 批量:读 学号↔uid↔姓名 映射 + 描述,循环调用 upload_one.py
使用
单孩子上传
cd <技能目录>/scripts
# upload_one.py <uid> <图片绝对路径> <标题> <童趣描述> <幼儿姓名>
python3 upload_one.py 691087 "/绝对路径/九 月作品/01.jpg" "九月中二班自画像" "这是圆圆的、白白的可爱笑脸…" "潘攀"
脚本会:
1. 打开该校幼儿的成长档案页
2. 点更新按钮打开「发布动态」弹窗
3. 填标题 + 描述 + 勾选「加入成长册」「家长可见」
4. 注入图片文件并触发上传
5. 点击发布
6. 跳回档案页核对记录数(count 增加 / latest 时间戳为今天 = 成功)
批量上传
准备一个 CSV(UTF-8),每人一行:
学号,uid,姓名,文件名,描述(描述内不要含逗号;或改用 --desc-json 从 JSON 读)
python3 batch_upload.py --roster 学号uid姓名.csv \
--images "/绝对路径/9 月作品_已确认" \
--title "九月中二班自画像" \
--desc-json "/绝对路径/descriptions.json"
batch_upload.py 会逐个调用 upload_one.py,每次之间停顿几秒避免重载守护进程,最后输出汇总:学号/姓名/成功与否。
scripts/upload_one.py 参数
| 参数 | 说明 |
|---|---|
uid |
幼儿在平台的 uid(建档时从学生列表 .list-item 或 URL 中取得) |
file |
本地图片绝对路径(jpg/png) |
title |
发布标题,如「九月中二班自画像」 |
desc |
作品描述(童趣文案),会粘贴到平台描述框 |
realname |
幼儿姓名,用于构造 upload 页面 URL 中文参数 |
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
YEJY_CID |
必填(无默认,缺省则脚本退出) | 班级 id(cid),从你班级的 student_detail/upload_video_img URL 中取得 |
YEJY_CLASS_TITLE |
class-gallery |
班级标题(URL 里的 title 参数,如 中2班,需 URL 编码) |
WB_DAEMON |
http://127.0.0.1:10086/command |
Kimi WebBridge 端点 |
WB_SESSION |
yejy-upload |
WebBridge 会话名(一组标签页,可改成任务名) |
示例:
YEJY_CID=你的班级id YEJY_CLASS_TITLE=%E4%B8%AD2%E7%8F%AD \
python3 upload_one.py <uid> <file> <title> <desc> <realname>
> YEJY_CLASS_TITLE 若为中文需先 URL 编码(如 中2班 → %E4%B8%AD2%E7%8F%AD)。
常见问题
- 报
no extension connected:daemon 已跑但扩展没连上。点一下 Chrome 右上角 Kimi WebBridge 图标 / 刷新任意页面唤醒 service worker,重试。 - 报
upload needs Chrome's per-extension file access:在chrome://extensions打开该扩展「Allow access to file URLs」。 - 点发布后档案没新记录:多半是文件没进
data_ary。确认F步输出upload_data有 URL 且latest时间戳为今天;若F回closed (likely success)但仍无记录,检查是否被平台校验拦截(如分类/标签必填)。 - 发布后仍提示「请上传图片或视频」:WebBridge
upload设的是主页面 staging input,务必先用我们注入 iframe 的路径(见本文「工作原理」),不要直接对#upload_image用 WebBridge upload。 - 跨域 iframe 限制:WebBridge 的
fill/click/evaluate只作用于主页面;本技能通过「主页面 staging input + 注入 iframe」绕开,请勿改动这条路径。
脱敏说明
本技能只包含通用流程与脚本,不包含任何真实幼儿姓名、uid、班级 private 数据。使用时由用户提供自己的 学号↔uid↔姓名 映射与文件。