本项目旨在研究学习爬虫技术和网络接口编程技术,同时致力于以开源方式抵制并消灭各种付费“刷课平台”和“黑产”
效果演示视频 https://www.bilibili.com/video/BV1yt4y1P7NF
- ✅支持手机号+密码登录、二维码登录, 自动判断账号 ck 有效性, 自动 + 手动重登账号
- ✅自带多会话管理器,自动获取用户信息,以 json 格式存档在本地
- ✅Terminal-UI 方式进行人机交互,展示任务进程、任务点状态
- ✅视频课程任务点模拟播放
- ✅文档任务点模拟浏览(如 word ppt pdf 等)
- ✅章节测验任务点自动答题,支持单选题、多选题、判断题
- ✅支持
REST API
、JSON
、SQLite
三种类型的题库 - ✅
REST API
类型(在线题库接口)支持使用 JsonPath 语法进行答案字段提取
以下特性有可能逐渐被添加
- ❌短信验证码登录、学号登录
- ❌直播任务点、文章阅读任务点、课程考试
- ❌章节测验任务点简答题
- ❌保存未完成的章节测验任务点
- ❌多题库搜索器实例混用及负载均衡
- ❌记录错题到日志
- ⭕获取任务点状态会出现
0/0
的情况 (即使任务点存在未做) - ⭕拉取试题有概率出现权限无效情况
使用 Python 版本 >= 3.10.0
clone 项目到本地,并使用 poetry 安装依赖和管理 venv
git clone 'https://github.com/SocialSisterYi/CxKitty'
cd CxKitty
poetry install
运行主程序
poetry run python3 main.py
clone 项目到本地,并开始构建 Docker 镜像
git clone 'https://github.com/SocialSisterYi/CxKitty'
cd CxKitty
docker build --tag cx_kitty .
运行容器
docker run -it \
--name shuake_task1 \
-v "$PWD/session:/app/session" \
-v "$PWD/config.yml:/app/config.yml" \ # 程序配置文件
#-v "$PWD/questions.json:/app/questions.json" \ # json题库 (根据配置文件修改路径映射)
#-v "$PWD/questions.db:/app/questions.db" \ # sqlite题库 (根据配置文件修改路径映射)
cx_kitty
配置文件使用 Yaml 语法编写,存放于 config.yml
multiSession: true # 是否开启多会话模式
sessionPath: "session/" # 会话存档路径
maskAcc: true # 是否开启姓名手机号打码
tUIMaxHeight: 20 # TUI 最大显示高度
# 视频
video:
enable: true # 是否执行任务
speed: 1.0 # 播放速度
wait: 15 # 完成等待时间
report_rate: 58 # 视频播放汇报率 (没事别改)
# 试题
exam:
enable: true # 是否执行任务
wait: 15 # 完成等待时间
#fail_save: true # 是否匹配失败自动保存 (未实现)
# 文档
document:
enable: true # 是否执行任务
wait: 15 # 完成等待时间
# 搜索器
searcher:
use: "jsonFileSearcher" # 当前选择的搜索器
# REST API 在线搜题
restApiSearcher:
url: "http://127.0.0.1:88/v1/cx" # API url
method: "POST" # 请求方式
req_field: "question" # 请求参数
rsp_field: "$.data" # 返回参数 使用 JSONPath 语法进行查询
# 本地 JSON 数据库搜索器 (key为题, value为答案)
jsonFileSearcher:
file_path: "questions.json" # 数据库文件路径
# 本地 sqlite 数据库搜索器
sqliteSearcher:
file_path: "questions.db" # 数据库文件路径
table: "question" # 表名
req_field: "question" # 请求字段
rsp_field: "answer" # 返回字段
单选题问题与答案应当一一对应,多选题使用#
或;
分隔每个选项,判断题答案只能为对
、错
、正确
、错误
、√
、×
REST API 搜题接口配置,确保接口searcher->restApiSearcher->url
可以正确访问访问(若使用 Docker 搭建,而题库 API 服务在宿主机运行,应使用宿主机虚拟网关 IP 地址而不是本地回环地址)
返回值必须为 JSON 格式,使用rsp_field
字段作为选择器传入,使用 JsonPath 语法编写,如$.data
或$.data.answer[*]
等
eg:
curl 'http://127.0.0.1:88/v1/cx' \
--data-urlencode 'question=国字的演变的过程告诉我们,国防就是国家的防务,国防与()是密不可分的' # 这里`question`为请求字段名
{
"code": 1,
"question": "国字的演变的过程告诉我们,国防就是国家的防务,国防与()是密不可分的",
"data": "国家", // 这里的`data`为响应字段名
"hit": true
}
JSON 题库,确保searcher->jsonFileSearcher->file_path
可以访问(使用 Docker 需要设置映射),key 为题目,value 为与之对应的答案
eg:
{
"国字的演变的过程告诉我们,国防就是国家的防务,国防与()是密不可分的": "国家"
}
SQLite 题库,确保searcher->sqliteSearcher->file_path
可以访问(使用 Docker 需要设置映射),表中应存在配置的请求和响应字段
eg:
SELECT answer FROM questions WHERE question = '国字的演变的过程告诉我们,国防就是国家的防务,国防与()是密不可分的';
国家
注:本项目非“开箱即用”,如需使用自动答题功能,请确保拥有准确无误的题库资源
当配置文件和题库资源无误后,运行主程序,进行选择会话存档
若少于一个会话存档,则需要进行账号登录
按照提示输入序号选择目标课程
程序会自动完成视频及测验任务点,并展示章节任务点情况
项目的中文名超星学习通答题姬
早已确定,英文名想到过CxHime
、CxExamHime
、CxCourseHime
然而都非常拗口,故弃用
又想到CxHelper
这个名,但helper
一词易使人联想到木马病毒可执行程序的文件名,很不吉利
最后由CxKit
衍生出CxKitty
这个名,一语双关kitty
自有“猫娘”含义,同时由于项目首字母缩写是cxk
,亦可解释为答题只因
- 本项目以 GPL-3.0 License 作为开源协议,这意味着你需要遵守相应的规则
- 本项目仅适用于学习研究,任何人不得以此用于盈利
- 使用本项目造成的任何后果与本人无关
Samueli924/chaoxing: 超星学习通/超星尔雅/泛雅超星全自动无人值守完成任务点 (github.com)
RainySY/chaoxing-xuexitong-autoflush: 超星学习通全自动无人值守视频刷课程序,使用协议发包来实现。 (github.com)
lyj0309/chaoxing-xuexitong-autoflush: 超星学习通全自动无人值守刷课程序,使用协议发包来实现,无需浏览器,支持自动过测验、过视频。 (github.com)
ocsjs/ocsjs: OCS 网课助手,网课脚本,帮助大学生解决网课难题 ,目前支持网课:超星学习通,知道智慧树 , 支持脚本猫以及油猴脚本运行。 (github.com)
SocialSisterYi/xuexiaoyi-to-xuexitong-tampermonkey-proxy: 基于“学小易”搜题API的学习通答题/考试油猴脚本题库代理 (github.com)