# KKW-Crawler **Repository Path**: code-weaver/kkw-crawler ## Basic Information - **Project Name**: KKW-Crawler - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-15 - **Last Updated**: 2025-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KKW-Crawler KKW-Crawler 是一个基于 Python 的自动化爬虫工具,专为北软酷课网设计。它能够自动完成登录、滑块验证码破解、课程和作业节点导航,并将学生提交的学号、姓名、提交时间和提交链接导出到 Excel 文件。 --- ## 功能特性 - 自动登录:切换到账号密码登录,填写用户名和密码,自动完成滑块验证码破解(基于 ONNX 模型)。 - 课程 & 作业导航:根据课程后缀自动点击对应课程卡片,再精确定位作业节点。 - 批量提交抓取:自动分页翻页,使用浏览器内执行 JavaScript 的方式抓取每行学生提交信息,避免元素过时。 - 状态筛选:可按“已评分”、“已提交未评分”等状态过滤后再抓取。 - Excel 导出:去重后将结果保存为 `submissions.xlsx`。 - 图形界面:PyQt5 GUI 界面,支持用户名、密码、课程后缀、作业标题输入,并可切换 Headless 模式。 - 鲁棒性:自动处理登录后公告弹窗,隐藏干扰页面元素,并统一设置大尺寸窗口以防遮挡。 --- ## 环境依赖 1. 系统要求 - Python 3.9 及以上 - Google Chrome 浏览器 - 与 Chrome 版本匹配的 ChromeDriver 2. Python 库 ```bash pip install -r requirements.txt ``` requirements.txt 内容: ```text selenium pandas pyqt5 captcha_recognizer python-dotenv # 可选,用于加载 .env ``` --- ## 配置方法 1. 环境变量(可选) - KKW_USERNAME:教师账号(学号/教工号) - KKW_PASSWORD:登录密码 ```bash export KKW_USERNAME="your_username" export KKW_PASSWORD="your_password" ``` 2. config.py ```python DRIVER_PATH = "/path/to/chromedriver" LOGIN_URL = "https://kk.nsi-soft.com/nsiSSO/login/index.do" ``` 3. ChromeDriver - 下载地址:https://sites.google.com/chromium.org/driver/ - 放到系统 PATH 或在 DRIVER_PATH 中指定完整路径 --- ## 使用说明 ### 命令行模式 ```bash python main.py ``` 1. 从环境变量读取 KKW_USERNAME 和 KKW_PASSWORD,也可在脚本中修改设置。 2. 启动 Chrome(默认 Headless),自动登录并破解滑块验证码。 3. 点击“教学平台” → 课程后缀 → 作业标题。 4. 点击“查看作业提交情况”,按“状态”筛选并查询。 5. 自动翻页抓取所有数据,去重后生成 `submissions.xlsx`。 > 提示: 若不想使用环境变量或在脚本中明文暴露账号密码,建议使用 GUI 模式,在运行时安全输入凭据且不留盘端记录。 - 课程后缀填写:例如课程完整名称为 [auto]14423-软件工程-张三 2024-2025_2,请在 main.py 中将 course_suffix 设置为 14423-软件工程-张三 2024-2025_2(位于代码的第96行)。 - 作业标题填写:例如学生提交窗口中的名称为 期末考试 提交处,请在 main.py 中将 browser.select_submission("期末考试 提交处", ...) 中的参数替换为对应标题(位于代码的第102行)。 ### 图形界面模式 ```bash python KKWCrawlerGUI.py ``` 1. 在界面中依次输入 用户名、密码。 2. 课程后缀:例如课程完整名称为 [auto]14423-软件工程-张三 2024-2025_2,仅填写 14423-软件工程-张三 2024-2025_2。 3. 作业标题:例如学生提交窗口的名称为 期末考试 提交处,就在“Submission title”栏输入 期末考试 提交处。 4. 勾选或取消 Headless Mode。 5. 点击 Start Scraping,进度日志会实时更新。 6. 完成后会弹出提示,Excel 文件保存在当前工作目录下的 `submissions.xlsx`。 --- 常见问题与排错 - Element Click Intercepted:页面浮层或侧边栏遮挡按钮。已在代码中自动隐藏 .el-col.el-col-20 遮挡元素,并统一设置 --window-size=1920,1080 并在非 headless 下调用 maximize_window()。 - 滑块破解失败:请确保已安装 captcha_recognizer,并查看 tmp/captcha.png 截图是否清晰。 - 元素过时:使用 JavaScript 获取表格数据,避免 StaleElementReferenceException。 - 版本不匹配:ChromeDriver 版本必须与浏览器保持一致。