Skip to content

elel-code/educoder-lab-runner

Repository files navigation

educoder-lab-runner

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:自动化速度档位,支持 fastnormalslow

chapterIndexsectionIndex 只表示起点。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

启动自动化

确认配置中已经加入 accountpassword 后运行:

deno task start

运行时终端会输出当前目标,例如:

Loaded 65 section(s) from chapterIndex=5, sectionIndex=3.
Opening section 1/65: 第五章 软件需求工程基础 / 需求工程
Answering question group 1/2: 需求工程

如果 headless: false,浏览器会显示出来。自动化失败时浏览器会保留,便于查看停在哪个页面。

Playwright 测试和录制

运行 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 里没有配置 accountpassword。在本地加入即可,不要把真实账号密码提交到远程仓库。

浏览器没有安装

如果启动时提示找不到 Firefox,运行:

deno task install:firefox

如果是录制器相关的 Chromium 问题,运行:

deno task install:chromium

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors