如何不使用Google API仅通过Bash爬取Google Classroom课程作业
纯Bash无Google API下载Google Classroom作业实现方案
之前操作失效的核心原因有两个:
- 手动提取的Cookie不全,且未携带完整浏览器请求头。Google鉴权不止校验Cookie字段,还会校验User-Agent、Referer等请求头特征,缺项就会判定为非浏览器请求,打回登录重定向页。
- 从开发者工具复制的gRPC接口请求返回的是Protobuf压缩后的二进制载荷,不是可直接解析的文本或HTML,直接保存自然无法读取作业内容。
操作步骤
1. 提取有效鉴权参数
不要手动导出Cookie文件,在已登录Google Classroom的浏览器中打开目标课程页,按F12调出开发者工具切到网络面板,刷新页面,找到第一个请求目标为classroom.google.com、类型为document的请求,右键选择「复制」-「复制为cURL(bash)」。
把复制的命令粘贴到终端执行,将输出重定向为test.html,本地打开如果能看到登录态下的课程页面内容,说明鉴权参数有效,保留这段命令里的所有Cookie、请求头参数,后续所有请求都复用这部分参数。
核心校验Cookie字段包含
SID、HSID、SSID、APISID、SAPISID,缺任意一个都会鉴权失败。
2. 拉取课程与作业列表
Classroom静态页面不直接渲染作业数据,无需解析二进制gRPC响应,直接请求其前端自用的数据接口即可,无需申请官方API密钥:
- 拉取账号下全部课程列表:将cURL命令的请求URL替换为
https://classroom.google.com/u/0/h/courses,返回结果为JSON格式,包含所有已加入课程的ID、名称、教师信息。 - 拉取指定课程的全部作业列表:将cURL命令的请求URL替换为
https://classroom.google.com/u/0/c/[替换为目标课程ID]/list?filter=assignments,返回的JSON中包含该课程下所有作业的ID、标题、发布时间、截止时间、附件链接、作业描述等完整信息,直接保存为本地JSON文件即可。
3. 批量下载作业及附件
安装bash环境下的JSON处理工具jq(多数Linux/macOS包管理器可直接安装),从作业列表JSON中提取所有附件链接,复用之前的鉴权cURL命令批量下载:
# 提取作业列表中所有附件链接 jq -r '.items[] | select(.attachments != null) | .attachments[].driveFile.alternateLink // .attachments[].link.url // .attachments[].youtubeVideo.url' assignments_list.json > attachment_urls.txt # 创建课程存储目录 mkdir -p "目标课程名" # 逐行下载附件,跟随跳转 while read -r url; do # 下方替换为你之前验证有效的cURL命令,保留所有Cookie和请求头,添加-L参数跟随302跳转,-o指定保存路径 curl [你的所有鉴权Cookie参数] [你的所有请求头参数] -L "$url" -o "目标课程名/$(date +%s)_$(basename "$url" | cut -d'?' -f1)" # 加2秒延迟避免触发频率限制 sleep 2 done < attachment_urls.txt
避坑说明
- 提取的Cookie有效期通常为2~3周,过期后重新从浏览器复制一次鉴权参数即可。
- 请求头中的User-Agent必须和提取Cookie时使用的浏览器完全一致,不要随意修改,否则会触发Google风控跳转到登录页。
- 复制的原始cURL命令如果带
--compressed参数不要删除,该参数用于自动处理gzip压缩响应,删除后可能拿到乱码内容。 - 下载Google Drive类附件时必须加
-L参数跟随重定向,否则只能拿到跳转页拿不到实际文件。
内容的提问来源于stack exchange,提问作者gianmauroilgrandissimo
相关产品推荐
相关产品推荐

