如何通过Python实现谷歌认证以爬取Google Classroom登录后内容?
解决方案
结论:可以爬取登录后的课堂专属内容,但必须用合规的认证方式,不能依赖普通HTTP请求模拟登录
方法一:使用Google Classroom官方API(推荐,最稳定合规)
谷歌提供了官方的Classroom API,这是唯一不会触发反爬机制的合法途径,步骤如下:
- 前往Google Cloud控制台创建新项目,搜索并启用「Classroom API」
- 创建OAuth 2.0客户端ID,配置OAuth同意屏幕(个人使用选「外部」即可,添加自己为测试用户)
- 安装Python客户端库:
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib - 示例代码(获取课程列表及课程内容):
from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # 按需调整权限范围 SCOPES = ['https://www.googleapis.com/auth/classroom.courses.readonly', 'https://www.googleapis.com/auth/classroom.coursework.me.readonly'] def main(): flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # 构建API服务实例 service = build('classroom', 'v1', credentials=creds) # 获取课程列表 courses = service.courses().list(pageSize=10).execute() for course in courses.get('courses', []): print(f"课程名称:{course['name']}") # 获取课程内作业/内容 coursework = service.courses().courseWork().list(courseId=course['id']).execute() for work in coursework.get('courseWork', []): print(f"作业标题:{work['title']}") print(f"作业内容:{work.get('description', '无内容')}\n") if __name__ == '__main__': main()
运行代码会自动打开浏览器完成授权,授权后即可直接访问登录用户的课堂数据,无需手动处理Cookie或认证逻辑。
方法二:用真实浏览器模拟(适合快速验证,不建议长期批量使用)
如果不想折腾API,可以用Selenium/Playwright操控已登录的浏览器实例,直接继承主浏览器的登录会话:
- 安装Selenium:
pip install selenium,并下载对应浏览器的驱动(比如ChromeDriver) - 找到你主浏览器的用户数据目录:
- Windows:
C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data - Mac:
~/Library/Application Support/Google/Chrome - Linux:
~/.config/google-chrome
- Windows:
- 示例代码(用Chrome已登录会话访问Classroom):
from selenium import webdriver from selenium.webdriver.common.by import By options = webdriver.ChromeOptions() # 替换成你自己的用户数据目录路径 options.add_argument(r"user-data-dir=C:\Users\XXX\AppData\Local\Google\Chrome\User Data") # 指定默认配置文件 options.add_argument("--profile-directory=Default") driver = webdriver.Chrome(options=options) driver.get("https://classroom.google.com") # 提取页面全部文本示例 page_text = driver.find_element(By.TAG_NAME, "body").text print(page_text) # 后续可根据页面元素定位提取具体内容
这种方式直接复用真实浏览器的登录状态,不会触发认证错误,但要注意控制爬取频率,避免被谷歌检测为异常流量。
为什么旧方案失效?
谷歌现在对自动化请求的检测非常严格,普通requests库发送的请求缺少浏览器的JS执行环境、指纹信息(如User-Agent、Canvas指纹等),即使带上Cookie也会被识别为非人类请求,直接拦截。官方API或真实浏览器模拟是目前仅有的可行方式。
内容的提问来源于stack exchange,提问作者Lost Control
相关产品推荐
相关产品推荐

