接管浏览器,按真实学习节奏自动完成网课任务
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LeuJasYoh/dsh-xuexi该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
- 读取本地文件index.js:12
return JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')).version - 读取本地文件index.js:20
return readFileSync(new URL('./prompts/study-mode.md', import.meta.url), 'utf8') - 发起网络请求lib/cdp/session.mjs:70
response = await fetch(this.endpoint + '/json/list', { signal: AbortSignal.timeout(5000) }) - 读取本地文件lib/notes/store.mjs:63
return { note: JSON.parse(await readFile(file, 'utf8')), file, workspaceRoot } - 写入本地文件lib/notes/store.mjs:73
await mkdir(notesRoot(workspaceRoot), { recursive: true }) - 写入本地文件lib/notes/store.mjs:75
await writeFile(temp, JSON.stringify(note, null, 2) + '\n', 'utf8') - 写入本地文件lib/notes/store.mjs:77
await rename(temp, file) - 删除本地文件lib/notes/store.mjs:79
await rm(file, { force: true }) - 写入本地文件lib/notes/store.mjs:80
await rename(temp, file) - 写入本地文件lib/notes/store.mjs:88
await mkdir(root, { recursive: true }) - 读取本地文件lib/notes/store.mjs:89
const names = await readdir(root) - 读取本地文件lib/cxsecret/decode.mjs:5
const TABLE = JSON.parse(readFileSync(new URL('./table.json', import.meta.url), 'utf8')) - 发起网络请求lib/vendor/typr-bundle.mjs:2329
fetch(hurl)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 接管浏览器自动完成网课
- 按真实学习节奏执行
- 运行时自适应动态网站
把大模型当司令、脚本当手的 DSH Agent 预设:工具里零业务判断,让模型在运行时自适应动态结构的网站
README
由 DeepSeek 最新模型翻译生成dsh-xuexi · 网课模式
工具只当手和眼,判断全归大模型。
一个 DeepSeek Harness 插件 + Agent 预设:接管你正在用的浏览器,按真实学习的方式把网课任务做完。
这是什么,为什么这么做
大部分「网页自动化脚本」的思路是:把页面结构写死进代码。
页面一变就崩,于是不断加 if,最后没人敢改。
这个插件走的是相反的路:
大模型 = 大脑:看、判断、决定、应对没见过的情况 15 个工具 = 手和眼:点、写、滚、截图、取事实 —— 不认识任何网站
这是被一次真实事故逼出来的
旧版本把「某个网站长什么样」写死在工具里,又把「按什么顺序调工具」写进提示词。
用户换了一个学校的账号 —— 页面结构不一样:
- 专用工具报「课程不存在」(其实是它自己那个读法没读到)
- 想换回用户翻好的那一页,却根本没有「换标签页」这个工具
- 想直接点课程卡片,可通用眼睛那次没看见内嵌窗口里的东西
- 结果:原地打转十分钟,最后要用户手动帮它打开页面
根因不是模型笨,是它的退路被堵死了。
展开完整文档(README 剩余 1 节)
dsh-xuexi · 网课模式
工具只当手和眼,判断全归大模型。
一个 DeepSeek Harness 插件 + Agent 预设:接管你正在用的浏览器,按真实学习的方式把网课任务做完。
这是什么,为什么这么做
大部分「网页自动化脚本」的思路是:把页面结构写死进代码。
页面一变就崩,于是不断加 if,最后没人敢改。
这个插件走的是相反的路:
大模型 = 大脑:看、判断、决定、应对没见过的情况 15 个工具 = 手和眼:点、写、滚、截图、取事实 —— 不认识任何网站
这是被一次真实事故逼出来的
旧版本把「某个网站长什么样」写死在工具里,又把「按什么顺序调工具」写进提示词。
用户换了一个学校的账号 —— 页面结构不一样:
- 专用工具报「课程不存在」(其实是它自己那个读法没读到)
- 想换回用户翻好的那一页,却根本没有「换标签页」这个工具
- 想直接点课程卡片,可通用眼睛那次没看见内嵌窗口里的东西
- 结果:原地打转十分钟,最后要用户手动帮它打开页面
根因不是模型笨,是它的退路被堵死了。
所以 v2 只做三件事:
| # | 原则 | 落地方式 |
| ① | 工具只认识屏幕 | 编号、对账清单、票据指纹 —— 全部从屏幕上现读,代码里没有业务概念 |
| ② | 格式错在动手之前拦住 | 每个工具第一步是纯计算校验;ARG/USAGE 失败 = 页面一下都没被碰过 |
| ③ | 大脑永远有退路 | 截图 → 列出能点的 → 点一个看变化。这三件永远不会失效 |
15 个工具
眼(5)—— 只报事实
| 工具 | 干什么 |
| eye_open | 接管浏览器,报现在开着哪几个标签页、我接的是哪个、登录没有、以前的笔记 |
| eye_see | 这一页有几处要处理、每处是挑还是写、有几个选项、有没有「已完成」标记 |
| eye_list | 所有能点能填的东西(含内嵌窗口),每个一个编号 |
| eye_shot | 截图 —— 图直接放在返回里,模型真的能看到 |
| eye_check | 交之前复核,七条全过才发票据 |
手(6)—— 只做一个动作
| 工具 | 干什么 |
| hand_click | 点(编号 / 文字 / 坐标) |
| hand_pick | 从页面给出的选项里挑 —— 单选 / 多选 / 判断 / 下拉对它都是同一件事 |
| hand_write | 在指定的可写区里写字,写完回读实际内容 |
| hand_scroll | 滚 |
| hand_goto | 唯一的导航:跳网址 / 后退 / 刷新。工具绝不自作主张跳页 |
| hand_tab | 换浏览器标签页 |
必要(4)—— 只有两类动作需要代码兜住
| 工具 | 为什么必须由代码守 |
| hand_play | 铁律:原速 1x、永不拖进度条、永不伪造心跳、严格串行。参数里故意没有倍速/跳转/心跳 |
| hand_submit | 做错回不了头:不接受任何答案,只读页面 + 两份复核登记,自己再核一遍才点 |
| hand_note | 笔记本 + 待办清单(下次 eye_open 带回来) |
| hand_verdict | 复核员专用(唯一对子智能体开放的工具) |
做题怎么写:三方独立复核
答题是全站唯一做错回不了头的动作(一般不给重做),所以交之前要三方独立:
① 主脑自己看图定一份,用 hand_pick / hand_write 弄在页面上 ★ 先弄完,再派人。别把自己那份告诉任何人。
② 派两个常驻复核员,给同一张截图 + 一份无答案编号清单
③ 它们各自 hand_verdict 登记(值写图上看得见的标签:"B" / "对")
④ eye_check 三方比对 → 通过才发票据 → hand_submit
为什么主脑的答案必须落在页面上:旧版主脑把复核员的 JSON 原样转发, 6 次提交和复核员给的 6 份一字不差 —— 实质只有一份判断,一个错就没人兜住。
现在工具直接读页面上的 filled,想报一个假答案,它做不到。
没有 afterReview 后门:不一致时永远不发票据。
放行只有一条路 —— 复核员拿到特写后重新登记、且新结论一致。
登记是「每人一份当前结论、整体覆盖」,身份由 ctx.agents 判定,不靠自报。
边界
只有四种情况会当场打断你:图形验证码 / 未登录 / 熔断或额度 / 人脸抓拍。
其余(听力题、看视频才能答的题、讨论帖)一律 hand_note({ tag:"pending" }) 记账,做完一次性汇报。
铁律六条(代码会拦):
原速 1x | 永不拖进度条 | 永不伪造心跳 | 严格串行 | 不破解验证 | 不代填账号密码
人脸识别 / 抓拍直接拒绝 —— 它要求摄像头前坐着真人,原理上做不到。
安装
1. 装进 DSH 桌面配置档 .\install.ps1
2. 重启 DSH
3. 设置 → Agent 预设 → 选「网课模式」
需要一个开了调试端口的浏览器(默认 9222):
chrome.exe --remote-debugging-port=9222 --user-data-dir="$env:USERPROFILE\.dsh\xuexi\browser-profile"
测试
npm test
断言分五组:参数校验(含零副作用的结构保证)、复核闸门(七条 + 票据 + 登记覆盖)、工具表面(15 个、前缀、并发标志、铁律参数里不许有倍速)、痕迹检查(代码里不许有平台字样和写死的网址)、预设自检。
仓库结构
index.js 15 个工具 + 统一外壳 + 前置校验 + 角色闸门 lib/ args.mjs ★ 参数校验(纯函数,零副作用) gate.mjs ★ 复核七条 + 票据指纹 + 登记簿(纯函数,可测) browser.mjs CDP:标签页 / 截图 / 跨窗口 / 自愈重连 see.mjs 看:四类区域 + 编号清单 hand.mjs 手:点 / 挑 / 写 / 滚 / 播 note.mjs 笔记本 + 过程文件 prompts/xuexi-mode.md 模式提示词 facts/平台事实.md 经验种子(不是规则,用完让位给真实观察)
过程文件落在哪:<工作区>/.xuexi/(截图、笔记、记账)—— 跟对话在一起,好清理。
机器状态:~/.dsh/xuexi/browser-profile(登录态,跨会话共用)。
一句
你看到的是屏幕,不是数据库。 看不清就截图;不确定就记下来;拿不准就别猜。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
LeuJasYoh/dsh-xuexi
接管浏览器,按真实学习节奏自动完成网课任务
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目