Skip to content

Repository files navigation

AnyView Automator

这是一个用于自动化提交广工 AnyView 平台作业的 Python 脚本。它能自动从 Markdown 文件中解析代码答案,并模拟浏览器操作将代码提交到 AnyView 学生端。

🚀 功能特点

  • 自动化提交:自动登录、进入课程、查找题目、输入代码并运行。
  • 智能解析:自动从 gdut_anyview_example-main 目录下的 Markdown 笔记中提取题目 ID 和对应的代码。
  • 防反爬策略:模拟真实键盘输入,包含随机延时,避免被判定为机器人。
  • 自动头文件:自动为代码添加 allinclude.h 引用。
  • 断点续传:支持跳过已通过的题目(需在脚本中稍作调整检测逻辑)或通过缓存的 solutions.json 快速加载。

🛠️ 安装与配置

1. 环境要求

  • Python 3.8+
  • Chrome 浏览器
  • ChromeDriver (版本需与浏览器一致)

2. 安装依赖库

在终端运行以下命令安装所需的 Python 库:

pip install selenium

3. 配置脚本

本脚本使用 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

运行流程

  1. 脚本会询问是否使用 solutions.json(如果存在)。输入 y 或直接回车使用缓存答案,输入 n 重新扫描 Markdown 文件。
  2. 自动启动 Chrome 浏览器。
  3. 自动登录 AnyView(确保你已配置好账号密码)。
  4. 依次进入每个题目页面,清除旧代码,输入新代码并点击运行。
  5. 等待 15 秒查看结果,然后返回列表继续下一个。

📝 如何修改答案

你有两种方式修改或添加题目的答案。

方法一:修改源 Markdown 文件(推荐,作为长期备份)

脚本会自动扫描 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(快速调试)

如果你已经运行过一次脚本,根目录下会生成 solutions.json。你可以直接编辑这个文件来修正单个题目的答案,而不需要去改 Markdown。

JSON 结构

[
    {
        "id": "DC010011",
        "code": "#include \"allinclude.h\"  //DO NOT edit this line\nint main()..."
    },
    ...
]

修改后,下次运行脚本时选择 使用 JSON 加载 (y) 即可生效。


⚠️ 常见问题与注意事项

  1. 题目ID匹配: 脚本通过正则表达式 (DC\w+) 匹配题目 ID。请确保 Markdown 中的 ID 准确无误,否则无法在网页上定位题目。

  2. 代码输入卡顿: 为了模拟人类输入,脚本可以分块输入代码。如果觉得太慢或太快,可以调整 submit_solution 函数中的 chunk_size

  3. 无法定位编辑器: AnyView 使用 Monaco Editor,其结构较复杂。如果脚本提示“无法定位代码区域”,请不要最小化浏览器窗口,保持其在前台显示。

  4. 跳过已通过题目: 脚本内含检测逻辑,如果识别到题目行包含“已通过”,会自动跳过。

  5. 头文件: 脚本强制要求代码包含 #include "allinclude.h" //DO NOT edit this line。如果你的原代码里没有,脚本会自动添加到第一行。

About

An auto programme to pass anyview tasks,but you need to understand the code to fit in your answers.Otherwise it can only finish 数据结构.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages