Skip to content

Latest commit

 

History

History
105 lines (77 loc) · 3.48 KB

File metadata and controls

105 lines (77 loc) · 3.48 KB

ZF-Grabber

License: MIT Python Version Scrapling

面向正方教务系统的异步课程任务工具,附带一个无需构建环境、可直接在浏览器中打开的配置生成器。核心网络与页面解析层基于 Scrapling,支持浏览器 TLS 指纹、持久 Cookie、连接池和自适应元素定位。

Important

默认接口来自山东农业大学旧版正方教务系统,该校目前已更换系统。不同学校可能采用短信、滑块、前端 RSA/AES 加密或定制接口,需要结合实际系统适配。

Warning

本项目仅供技术交流与合规研究。请勿绕过访问控制、制造高频恶意请求或违反学校规定。账号封禁、选课结果异常等后果由使用者自行承担。

主要变化

  • 使用 FetcherSession 代替 requests.Session,由 Scrapling 统一维护 Cookie、连接池和浏览器指纹。
  • 使用 Scrapling CSS 选择器解析 csrftoken,并保存元素特征以应对小范围页面结构变化。
  • 使用 asyncio 并发执行课程任务,不再为每个任务创建独立线程。
  • 登录、查询、提交使用同一持久会话,网络错误由 Scrapling 请求重试与任务级重试共同处理。
  • WebUI 改为 GitHub 风格,支持系统深色模式、响应式布局、配置校验和安全提示。

目录结构

├── core/
│   ├── grabber.py
│   └── requirements.txt
├── frontend/
│   ├── index.html
│   ├── style.css
│   └── app.js
├── README.md
└── LICENSE

快速开始

1. 生成配置

直接打开 frontend/index.html

  1. 填写教务系统地址、学号、密码、学年和学期。
  2. 添加课程任务及可选的教师、时间、地点过滤条件。
  3. 点击 Download ZIP 获取完整本地运行包。

页面完全在浏览器本地处理配置,不会主动上传登录凭证。生成的 config.json 包含明文密码,请勿提交到公开仓库。

2. 安装依赖

Scrapling 需要 Python 3.10 或更高版本:

cd core
pip install -r requirements.txt

3. 创建配置

将 WebUI 生成的 config.json 放到 core/grabber.py 同一目录,或首次运行脚本生成空白配置后再填写:

{
    "base_url": "https://jw.example.edu.cn",
    "username": "2026000000",
    "password": "your-password",
    "xkxnm": "2026",
    "xkxqm": "12",
    "retry_delay": 1.0,
    "verify_ssl": true,
    "impersonate": "chrome",
    "tasks": [
        {
            "type": "tongshi",
            "kch_id": "XT108010",
            "teacher": "",
            "sksj": "",
            "jxdd": ""
        }
    ]
}

base_url 只填写协议和域名,不要包含 /jwglxtverify_ssl 建议保持开启,仅在旧系统证书确有问题时关闭。

4. 启动

python grabber.py

适配说明

课程类别目前保留原项目的两种映射:

type 正方代码 用途
tongshi 10 通识课
tiyu 15 体育课

教师采用包含匹配,时间和地点采用完整字符串匹配。如果目标系统的路径、字段或成功标志不同,请修改 core/grabber.py 中对应常量和解析函数。

License

MIT