educoder-lab-runner 是一个基于 Deno、Playwright 和 Firefox 的 Educoder
课堂实验自动化工具。它会读取本地题库数据,登录 Educoder,进入固定课程
软件工程与项目管理(23计算机),从配置的起始章节和小节开始,自动完成后续小节中的判断题、单选题和多选题。
- 从
questions_all.md提取结构化题库到data/questions.json。 - 从指定章节和小节开始,继续执行当前章节剩余小节以及后续章节。
- 支持多题组小节,能按题组顺序处理
上一关/下一关。 - 支持 Educoder 恢复到上次题组位置,也可强制回到第一题组。
- 内置随机节奏控制,避免所有点击都以机器速度连续执行。
headless: false时失败后保留浏览器窗口,方便观察页面状态。
先确认本机有 Deno:
deno --version如果没有 Deno,请先安装 Deno。Arch/CachyOS 可以使用系统包管理器安装,也可以使用 Deno 官方安装脚本。安装完成后进入项目目录:
cd /home/yk/Code/work初始化依赖:
deno install项目默认用 Firefox 执行自动化:
deno task install:firefox如果你还需要使用 Playwright 录制器 codegen,需要安装 Chromium:
deno task install:chromium也可以一次安装 Firefox 和 Chromium:
deno task install:browsers浏览器会安装到 Playwright 的项目本地目录,因为任务里固定了
PLAYWRIGHT_BROWSERS_PATH=0。这样不依赖系统浏览器包,换机器时也更稳定。
先从示例文件复制一份本地配置:
cp educoder.config.example.yaml educoder.config.yaml然后编辑 educoder.config.yaml。这个文件已被 .gitignore
忽略,账号和密码不会被提交到仓库:
account: "your-account"
password: "your-password"
chapterIndex: 5
sectionIndex: 3
alwaysStartFromFirstGroup: true
headless: false
speed: normal字段说明:
account:Educoder 登录账号。password:Educoder 登录密码。chapterIndex:起始章节,从1开始计数。sectionIndex:起始小节,从1开始计数。alwaysStartFromFirstGroup:是否进入小节后先点击上一关回到第一题组。headless:是否无头运行。调试时建议设为false。speed:自动化速度档位,支持fast、normal、slow。
chapterIndex 和 sectionIndex 只表示起点。CLI
会从这个小节开始,继续执行当前章节后续小节,然后执行后续章节。
速度档位建议:
fast:等待较短,适合本地网络稳定、只跑少量小节时使用。normal:默认档位,速度和稳定性折中。slow:等待更长,适合平台加载慢、频繁风控或页面状态不稳定时使用。
如果不想修改默认配置文件,可以使用环境变量指定另一个配置文件:
EDUCODER_CONFIG=./my-config.yaml deno task start项目运行依赖 data/questions.json。如果修改了
questions_all.md,需要重新提取题库:
deno task extract:questions这个命令会读取 questions_all.md,写入 data/questions.json。
确认配置中已经加入 account 和 password 后运行:
deno task start运行时终端会输出当前目标,例如:
Loaded 65 section(s) from chapterIndex=5, sectionIndex=3.
Opening section 1/65: 第五章 软件需求工程基础 / 需求工程
Answering question group 1/2: 需求工程
如果
headless: false,浏览器会显示出来。自动化失败时浏览器会保留,便于查看停在哪个页面。
运行 Playwright 测试:
deno task test tests/educoder.spec.ts显示浏览器运行测试:
deno task test:headed打开 Playwright UI:
deno task test:ui录制页面操作:
deno task codegen -o tests/educoder-recording.spec.ts https://www.educoder.net/查看测试报告:
deno task report错误类似:
Set account and password in educoder.config.yaml before running.
说明 educoder.config.yaml 里没有配置 account 或
password。在本地加入即可,不要把真实账号密码提交到远程仓库。
如果启动时提示找不到 Firefox,运行:
deno task install:firefox如果是录制器相关的 Chromium 问题,运行:
deno task install:chromium项目里的 install:chromium 使用 npmmirror 的 Chrome for Testing 镜像,比
Playwright 默认 CDN 更适合部分网络环境。只需要重试:
deno task install:chromium脚本在打开小节时会反复点击目标章节并重新查找小节卡片。如果仍然失败,建议把
headless 改成 false,观察当前停留页面。
小节标题使用精确匹配。例如 需求工程 不会匹配到
需求工程的输出和评审。如果题库数据和平台标题不一致,需要先修正
questions_all.md 并重新运行 deno task extract:questions。
脚本内置随机节奏控制,会在章节跳转、选项点击、评测、题组切换和小节切换之间自动等待。如果课程弹窗页被关闭,会尝试重新打开课程实验页并重试当前小节一次。
如果仍然触发风控,把配置里的 speed 改成 slow。
提交前建议运行:
deno fmt
deno check src/main.ts src/educoder.ts tests/educoder.spec.ts
deno lint src/main.ts src/educoder.ts tests/educoder.spec.ts