这是一个用于自动化提交广工 AnyView 平台作业的 Python 脚本。它能自动从 Markdown 文件中解析代码答案,并模拟浏览器操作将代码提交到 AnyView 学生端。
- 自动化提交:自动登录、进入课程、查找题目、输入代码并运行。
- 智能解析:自动从
gdut_anyview_example-main目录下的 Markdown 笔记中提取题目 ID 和对应的代码。 - 防反爬策略:模拟真实键盘输入,包含随机延时,避免被判定为机器人。
- 自动头文件:自动为代码添加
allinclude.h引用。 - 断点续传:支持跳过已通过的题目(需在脚本中稍作调整检测逻辑)或通过缓存的
solutions.json快速加载。
- Python 3.8+
- Chrome 浏览器
- ChromeDriver (版本需与浏览器一致)
在终端运行以下命令安装所需的 Python 库:
pip install selenium本脚本使用 YAML 文件进行配置。请参考 config.yaml.example 创建一个 config.yaml 文件,并填写你的学号和密码:
# 登录凭据
credentials:
username: "你的学号"
password: "你的密码"
# 其他配置 (通常保持默认)
settings:
login_url: "https://anyview.gdut.edu.cn/student/"
solutions_root_dir: "gdut_anyview_example-main"
solutions_json_path: "solutions.json"注意:为了安全,请务必将
config.yaml添加到.gitignore中(本仓库已默认添加),不要将包含私密信息的文件上传到公共仓库。
确保已经在项目根目录下(即 anyview_automator.py 所在目录),运行:
python anyview_automator.py- 脚本会询问是否使用
solutions.json(如果存在)。输入y或直接回车使用缓存答案,输入n重新扫描 Markdown 文件。 - 自动启动 Chrome 浏览器。
- 自动登录 AnyView(确保你已配置好账号密码)。
- 依次进入每个题目页面,清除旧代码,输入新代码并点击运行。
- 等待 15 秒查看结果,然后返回列表继续下一个。
你有两种方式修改或添加题目的答案。
脚本会自动扫描 gdut_anyview_example-main 文件夹下的章节目录(如 chapter1, chapter2...)。
在这些目录的 README.md 文件中,答案必须严格遵循以下格式才能被识别:
## 标题 <a name='任意'></a>DC010001 (这里是题目ID,必须以DC开头)
... 题目描述 ...
\`\`\`c
// 这里写你的代码
#include "allinclude.h" // 脚本会自动加这行,你手动加也可以
void func() {
...
}
\`\`\`关键点:
- 必须包含
##二级标题。 - 标题行中必须包含
DC开头的题目 ID(如DC020001)。 - 代码必须包裹在 ```c 或 ```cpp 代码块中。
如果你已经运行过一次脚本,根目录下会生成 solutions.json。你可以直接编辑这个文件来修正单个题目的答案,而不需要去改 Markdown。
JSON 结构:
[
{
"id": "DC010011",
"code": "#include \"allinclude.h\" //DO NOT edit this line\nint main()..."
},
...
]修改后,下次运行脚本时选择 使用 JSON 加载 (y) 即可生效。
-
题目ID匹配: 脚本通过正则表达式
(DC\w+)匹配题目 ID。请确保 Markdown 中的 ID 准确无误,否则无法在网页上定位题目。 -
代码输入卡顿: 为了模拟人类输入,脚本可以分块输入代码。如果觉得太慢或太快,可以调整
submit_solution函数中的chunk_size。 -
无法定位编辑器: AnyView 使用 Monaco Editor,其结构较复杂。如果脚本提示“无法定位代码区域”,请不要最小化浏览器窗口,保持其在前台显示。
-
跳过已通过题目: 脚本内含检测逻辑,如果识别到题目行包含“已通过”,会自动跳过。
-
头文件: 脚本强制要求代码包含
#include "allinclude.h" //DO NOT edit this line。如果你的原代码里没有,脚本会自动添加到第一行。