You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python实现谷歌认证以爬取Google Classroom登录后内容?

解决方案

结论:可以爬取登录后的课堂专属内容,但必须用合规的认证方式,不能依赖普通HTTP请求模拟登录


方法一:使用Google Classroom官方API(推荐,最稳定合规)

谷歌提供了官方的Classroom API,这是唯一不会触发反爬机制的合法途径,步骤如下:

  1. 前往Google Cloud控制台创建新项目,搜索并启用「Classroom API」
  2. 创建OAuth 2.0客户端ID,配置OAuth同意屏幕(个人使用选「外部」即可,添加自己为测试用户)
  3. 安装Python客户端库:pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
  4. 示例代码(获取课程列表及课程内容):
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操控已登录的浏览器实例,直接继承主浏览器的登录会话:

  1. 安装Selenium:pip install selenium,并下载对应浏览器的驱动(比如ChromeDriver)
  2. 找到你主浏览器的用户数据目录:
    • Windows:C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data
    • Mac:~/Library/Application Support/Google/Chrome
    • Linux:~/.config/google-chrome
  3. 示例代码(用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:11:00