绮课如何从教务系统抓取数据
绮课

绮课如何从教务系统抓取数据

更新于 2025-09-11
1554

操作步骤

  1. 配置好数据库连接的环境变量

  2. 打开全校课表查询页面。登录教务系统,并打开 【全校课表查询】,应该会自动弹出窗口打开课表查询页面,如果没有弹出,打开浏览器控制台,运行以下脚本: eval(document.body.lastElementChild.textContent.replaceAll('csujwc','jwctest'))

    javascript
    eval(document.body.lastElementChild.textContent)
  3. 在在浏览器控制台执行 document.cookie 或者是打开浏览器控制台,在任意网络请求中,找到其请求头的 cookie。将其作为绮课项目的环境变量 COOKIE,

    在中南大学教务系统课表查询页面获取用户凭证
    在中南大学教务系统课表查询页面获取用户凭证

  4. 运行 pnpm db:generate,生成 prisma 客户端代码

  5. 运行 pnpm db:push,将数据库模式应用到数据库

  6. 运行 pnpm db:seed,即可开始导入数据。

    如果遇到以下网络连接问题:

    Downloading Prisma engines for Node-API for windows [ ] 0%
    Error: request to...failed, reason: getaddrinfo ENOTFOUND 59996

    可以通过配置环境变量 PRISMA_ENGINES_MIRROR="https://registry.npmmirror.com/-/binary/prisma",指定 prisma 引擎下载镜像来解决,注意这个环境变量如果配在 .env 文件里,是没用的,可能是因为 prisma 并不读取 .env

如果你使用 powershell:

powershell
$env:PRISMA_ENGINES_MIRROR="https://registry.npmmirror.com/-/binary/prisma"

常见问题

部分课表查询页面无访问权限

某些 API 页面提示【您没有访问该功能的权限!】:这经常会发生,可以在浏览器教务系统页面删除 cookie 后再刷新得到新的 cookie 填入试试(好像是这样可以解决,记不得了)

大概的操作是:

  1. 通过课表查询页先登录教务,
  2. 访问在 http://csujwc.its.csu.edu.cn/framework/main.jsp ,如果已经显示为 公共信息查询用户 kbuser,则跳转 4,否则在右上角退出
  3. 重复 2,直至确保其他任何页面刷新后都跳转到登录页后,再访问 全校课表查询 链接,此时会发现仍能访问,
  4. http://csujwc.its.csu.edu.cn/framework/main.jsp,就会发现已登陆为公共信息查询用户 kbuser。
  5. 进入教务运行管理,用菜单中的总课表查询,查几次数据
  6. 之后脚本使用相同 cookie 爬取数据时就具有相应权限了。

确保具有总课表查询权限
确保具有总课表查询权限

参考