1、Playwright高级应用,拦截请求、expect_download()下载处理、多页面管理
2、反爬虫技术,隐藏webdriver属性绕过检测
3、双模式下载,同时支持API 请求和UI自动化两种方式
4、工程化完整,使用uv代替pip,有pyproject.toml依赖管理、main.spec打包配置、单可执行文件输出
5、工作流程
启动浏览器 → 人工登录 → 拦截 Cookie → 获取课程列表
↓
批量发送导出请求(API) + 批量下载成绩表(UI自动化)
↓
保存到 ./成绩表/ 目录
1、自动化登录与Cookie拦截,通过Playwright拦截请求获取认证Cookie
2、批量成绩导出API,使用requests向 https://lms.ouchn.cn/api/course/{course_id}/score/export/excel 发送请求
3、批量下载成绩表,自动化点击下载按钮,将Excel文件保存到本地“成绩表/ 目录”
4、反爬虫对抗,通过 Object.defineProperty(navigator, 'webdriver', {get: () => undefined}) 隐藏 webdriver 属性
5、实现流程
1. 启动 Chromium (headless=False,可视化浏览器)
↓
2. 创建上下文 ctx = browser.new_context(accept_downloads=True)
↓
3. 初始化页面 init_page() - 注入反爬虫脚本
↓
4. 注册 intercept_request 监听器拦截 /api/my-grades 请求获取Cookie
↓
5. 跳转到课程列表页 https://lms.ouchn.cn/user/courses#/
↓
6. input() 暂停等待用户手动登录完成
↓
7. 筛选课程角色: 点击 #course-role-select_ms → option-3
↓
8. 获取所有课程链接: a.ng-binding.ng-scope
↓
9. 批量处理每个课程:循环1: send_request(),API触发服务端生成Excel;循环2: grade_output() - UI点击下载保存到本地