GithubHelp home page GithubHelp logo

socialsisteryi / cxkitty Goto Github PK

View Code? Open in Web Editor NEW
668.0 10.0 103.0 5.82 MB

超星学习通答题姬(视频文档观看、模拟答题,无需浏览器、无需油猴,容器/host 运行ok!

License: GNU General Public License v3.0

Python 99.80% Dockerfile 0.20%
chaoxing chaoxingmooc terminal-ui xuexitong beautifulsoup4 python3 spider

cxkitty's Introduction

超星学习通答题姬

CxKitty

Github Stars Github Forks Github License Code style: black Image Size

本项目旨在研究学习爬虫技术和网络接口编程技术,同时致力于以开源方式抵制并消灭各种付费“刷课平台”和“黑产”

Ps: 本项目不提供任何题库资源,有相关测试需求者请按照文档自行解决。本项目仅供学习参考使用,请在下载部署后 24 小时内删除,由于使用本项目不当所造成的挂科或不良学习记录作者一概不负责。

✨Features

Supports

  • 会话管理
    • ✅支持手机号+密码登录、二维码登录,可以自动 / 手动重登账号
    • ✅内置多账号管理器,自动存取账号信息,自动判断会话 ck 有效性,以 json 格式存档在本地
  • 交互
    • ✅以 Terminal-UI 方式进行人机交互,展示工作流程、章节任务点状态,输出详细信息到 log 文件,作为一个理工男,不觉得很酷吗?
    • ✅批量选择课程(使用序号 / courseId / 课程名)
  • 协议实现
    • ✅使用 requestsbs4 分别进行协议模拟和 HTML 解析,故无需浏览器,更无需油猴脚本
    • ✅无惧接口风控,基于 OpenCVddddocr 对验证码进行识别,进而解除接口风控状态
    • ✅接口请求 retry 支持,针对网络环境不佳以及使用移动流量的场景优化
    • ✅人脸识别弹窗自动上传提交,支持课程进入、任务点进入、考试进入三种类型,可使用预先上传的人脸图片,也可自定义图片上传提交
  • 任务点
    • ✅视频课程任务点模拟播放(无需消耗流量播放流媒体内容)
    • ✅文档任务点模拟浏览(如 word ppt pdf 等)
  • 考试及测验
    • ✅章节测验任务点自动答题,支持单选题、多选题、填空题、判断题,试题未完成可临时保存
    • ✅课程考试(考试模式)自动答题,支持单选题、多选题、填空题、判断题(使用手机客户端接口)
    • ✅可以跳过考试承诺书(不支持自动提交)、可以跳过重考须知
    • ✅自动过滤题干和选项中的空白 Unicode 字符,eg:u+2002、u+200b、u+3000
    • ✅遇到匹配失败的题,可使用 fuzzer 方式填充答案并提交(默认关闭)
    • ✅章节测验试题 / 课程考试可完整导出,信息全、无加密无乱码,可导出临时保存的答案,现支持 json 格式
    • ✅自动答题功能需要至少一种的 题库后端 支持,现支持REST APIJSONSQLite三种类型的 题库后端,同时已适配Enncy网课小工具(Go题)题库海冷月题库Muke题库柠檬题库六种第三方题库,同时支持 ChatGPT 在线答题,可并行搜索,择优匹配答案(建议使用自建题库)
    • REST API类型 题库后端 (用户接口)支持使用 JsonPath 语法进行答案字段提取,允许用户注入 HTTP header 和 params 依赖字段
    • ✅日志中将记录未完成的题目,并自动导出未完成的题目到 json

TODO

以下特性有可能逐渐被添加

  • ⭕短信验证码登录、学号登录
  • ⭕直播任务点、文章阅读任务点
  • ⭕简答题、论述题等题型支持
  • ⭕富文本答题,匹配选项为图片的情况
  • ⭕使用 Gotify 或 MQTT 上报任务进度以及完成情况
  • ⭕使用 args 直接传参登录账号以及选课
  • ⭕导出已批阅的章节测验
  • ⭕试题自动等待交卷

❤️Contributing Guide

若发现程序存在任何 bug 或有好的想法,欢迎提交 Issue,提交 bug 反馈时需要带上报错信息截图(截全)以及对应 log 文件,并说明触发条件

如果有能力一同开发项目,欢迎使用 PR 提交代码(注意合并 Origin 和修改内容

提交 Issue 时应当遵守 提问的智慧 以及别像弱智一样提问,切勿以不懂萌新问个问题小白啥也不会浇浇整个xxx呗作为标题,否则一律忽略

Issue 为本项目的唯一反馈渠道,任何包括不限于在 QQ、B站私信、Telegram、微信 的提问一律忽略

🧩Typographical

🚀Build

💻本地化构建项目

使用 Python 版本 >= 3.10.0

clone 项目到本地,并使用 poetry 安装依赖和管理 venv

git clone 'https://github.com/SocialSisterYi/CxKitty'
cd CxKitty
poetry install

运行主程序

poetry run python3 main.py

🐋使用 Docker 构建项目

从 DockerHub 拉取最新镜像

docker pull socialsisteryi/cx-kitty

或手动构建镜像

展开

clone 项目到本地,并开始构建镜像

git clone 'https://github.com/SocialSisterYi/CxKitty'
cd CxKitty
docker build --tag socialsisteryi/cx-kitty .

运行容器

请按实际情况映射以下容器内路径:

/app/session会话存档目录

/app/logs程序日志目录

/app/export试题导出目录 (根据配置文件修改,如不需要可不映射)

/app/faces人脸上传目录 (根据配置文件修改,如不需要可不映射)

/app/config.yml程序配置文件

/app/questions.jsonjson题库 (根据配置文件修改,如不需要可不映射)

/app/questions.dbsqlite题库 (根据配置文件修改,如不需要可不映射)

由于程序使用 TUI,Docker 的日志服务会自动捕获并保存容器的 stdo,所以建议使用参数--log-opt max-size=xx限制容器的日志大小,以免造成过多的磁盘占用

docker run -it \
  --name cx_kitty \
  -v "$PWD/session:/app/session"  \
  -v "$PWD/export:/app/export" \
  -v "$PWD/logs:/app/logs" \
  -v "$PWD/faces:/app/faces" \
  -v "$PWD/config.yml:/app/config.yml" \
  #-v "$PWD/questions.json:/app/questions.json" \
  #-v "$PWD/questions.db:/app/questions.db" \
  --log-opt max-size=10m \
  socialsisteryi/cx-kitty

▶️可执行文件构建 (Windows/Linux/MacOS) (不建议使用)

Action中获取最新的自动构建文件,解压后执行文件

详细步骤

点击Action

右侧点击绿色的 最上面的名为Package Executable

跳转后拖到最底下

选择你自己的系统,点一下就会下载

解压出来后,先配置配置文件,然后执行文件就可以正常启动了

🔨Configuration

主程序配置

配置文件使用 Yaml 语法编写,存放于 config.yml

请根据注释修改配置内容

人脸识别配置

人脸识别图片要求必须 .jpg 格式,存放于face_image_path配置的路径下,默认为faces/

fetch_uploaded_face字段为true,在登录成功后立即尝试拉取该用户预先上传的人脸图片,成功后以用户 puid 命名(eg:114514.jpg),存放于face_image_path配置的路径下,以备需要识别时读取

人脸识别图片还可以自定义,要求图片文件名以 puid 命名,存放于face_image_path配置的路径下,但需要注意将fetch_uploaded_face设置为false,否则登录成功后会被覆盖

也可以为每个自定义一组多张人脸图片,图片以 puid+序号 命名(eg:114514_1.jpg114514_2.jpg),程序中使用正则/\d+(_d+)?\.jpg/遍历筛选,需要识别人脸时会从这组图片中随机抽取一张并上传

题库配置

单选题问题与答案应当一一对应,多选题使用#;分隔每个选项,判断题答案只能为正确错误×

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 = '国字的演变的过程告诉我们,国防就是国家的防务,国防与()是密不可分的';
国家

Enncy 题库,使用前请注册并获取 Token 填写在配置文件中(第三方题库)

通过此 链接 获取 Token

网课小工具(Go题)题库,使用前请注册并获取 Token 填写在配置文件中(第三方题库)

获取 Token 方式见 文档

题库海 题库,使用前请注册并获取 Token 填写在配置文件中(第三方题库)

通过此 链接 获取 Token

柠檬题库,使用前请注册并获取 Token 填写在配置文件中(第三方题库)

通过此 链接 获取 Token

ChatGPT 在线答题

ChatGPT 在线答题,使用前请注册并获取 API Key 填写在配置文件中(大语言模型)

可以考虑换成一些 GPT 代理站点,或考虑使用超高性价比新兴国产开源大模型 DeepSeek

DeepSeek 使用与 OpenAI 兼容的 API 格式,只需修改 base_urlmodel 即可使用。

特别注意,尽管 DeepSeek 性价比极高且中文能力相当强,但它的知识储备不足在部分领域受到较大限制

可在此处查看:DeepSeek 模型列表GPT 模型列表

📖Usage & Demo

注:本项目并非小白向“开箱即用”类型,需要一定的计算机专业技术能力;如需使用自动答题功能,请确保您拥有准确无误的题库资源

修改正确的配置文件,并提供配置中定义的资源,运行主程序,进行选择会话存档,若少于一个会话存档,则直接进入登录界面

登录界面输入手机号后按回车键输入密码,再按回车键进行登录

登录界面直接按下回车键则会显示二维码,使用学习通手机客户端扫描登录

按照提示选择目标课程,多个课程之间使用,分隔,使用课程选择器语法,如下:

  • 课程序号:012
  • 课程序号范围:0-35-10
  • 课程名:"解析几何""马克思主义"(非重复项可省略后半部分)
  • 课程 courseId:#23026xxx#22928xx

程序会自动完成视频及测验任务点,并展示章节任务点情况

如需要完成课程0、课程1-3、课程解析几何则输入:0,1-3,"解析几何"

如需进入考试模式,那么需要在指定课程(使用课程选择器语法)前输入EXAM|,即可进入二级菜单,如:

EXAM|0EXAM|"解析几何"

若配置文件的exam->confirm_submittrue那么在交卷前会提示确认,否则将自动交卷

如需导出题库到 export 路径,需在考试选择界面输入e+序号

💡About Repo Name

项目的中文名超星学习通答题姬早已确定,英文名想到过CxHimeCxExamHimeCxCourseHime然而都非常拗口,故弃用

又想到CxHelper这个名,但helper一词易使人联想到木马病毒可执行程序的文件名,很不吉利

最后由CxKit衍生出CxKitty这个名,一语双关kitty自有“猫娘”含义,同时由于项目首字母缩写是cxk,亦可解释为答题只因

⚠️Disclaimers

  • 本项目以 GPL-3.0 License 作为开源协议,这意味着你需要遵守相应的规则
  • 本项目仅适用于学习研究,任何人不得以此用于盈利
  • 使用本项目造成的任何后果与本人无关

📈Stargazers

Stargazers over time

🔗Link Repos

Samueli924/chaoxing: 超星学习通/超星尔雅/泛雅超星全自动无人值守完成任务点 (github.com)

RainySY/chaoxing-xuexitong-autoflush: 超星学习通全自动无人值守视频刷课程序,使用协议发包来实现。 (github.com)

lyj0309/chaoxing-xuexitong-autoflush: 超星学习通全自动无人值守刷课程序,使用协议发包来实现,无需浏览器,支持自动过测验、过视频。 (github.com)

chettoy/FxxkStar: API and unofficial client for the SuperStar mooc platform | 超星学习通的API和非官方客户端脚本,为学生提供更好的学习体验 (github.com)

ocsjs/ocsjs: OCS 网课助手,网课脚本,帮助大学生解决网课难题 ,目前支持网课:超星学习通,知道智慧树 , 支持脚本猫以及油猴脚本运行。 (github.com)

SocialSisterYi/xuexiaoyi-to-xuexitong-tampermonkey-proxy: 基于“学小易”搜题API的学习通答题/考试油猴脚本题库代理 (github.com)

CodFrm/cxmooc-tools: 一个 超星(学习通)/智慧树(知到)/**大学mooc 学习工具,火狐,谷歌,油猴支持.全自动任务,视频倍速秒过,作业考试题库,验证码自动打码(੧ᐛ੭挂科模式,启动) (github.com)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.