You need to enable JavaScript to run this app. Python结合requests库实现Google账号登录的失败问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Python结合requests库实现Google账号登录的失败问题排查

各方案失效的核心原因

所有尝试的失败本质上是同一个根本矛盾:Google从2020年起上线的账号防护体系,已经完全禁止了不支持JS执行的纯HTTP请求库通过模拟表单完成登录,每个方案的具体问题拆解如下:

  • 方案一:直接请求Classroom页面
    所有Google Workspace关联服务(Classroom、Gmail、Drive等)的服务端逻辑,都会在收到请求时第一时间校验会话Cookie的合法性。没有携带有效认证Cookie的请求,会被直接302重定向到登录引导页,根本不会返回目标页面的真实内容。你打印出的所有登录跳转链接,本质是重定向后登录页的源码,和你要爬取的Classroom页面没有任何关系。
  • 方案二:用twill模拟登录流程
    Google当前的登录流程早已不是传统的单页表单提交:整个流程是分步跳转的——先提交账号校验用户名有效性,再跳转密码输入页,中间穿插大量动态生成的时效CSRF Token、设备指纹校验、可疑登录人机验证环节。twill是2010年前后开发的静态表单模拟工具,既不支持动态分步的流程跳转,也不支持JS渲染生成的动态校验参数,本身就不具备跑通Google登录流程的能力。
  • 方案三:用requests.Session手动提交登录表单
    失效原因有三点:
    1. 你提交的登录接口早已失效,Google的账号登录接口参数规则、字段名称已经迭代了多轮,早年使用的Email/Passwd字段提交的请求会被服务端直接丢弃,根本不会进入账号校验环节
    2. 纯requests的默认请求头没有携带Google要求的设备指纹、浏览器环境校验参数,会被服务端直接判定为非真实浏览器的自动化请求
    3. 没有处理登录过程中的强制校验环节:如果账号开启了两步验证,或是服务端判定请求IP存在风险,就算提交的账号密码完全正确,也不会下发有效会话Cookie,后续访问Gmail时自然还是未登录状态,校验语句my_mail in s.get("https://mail.google.com/mail/u/0/#inbox").text返回False是必然结果。
纯Python+requests场景下的可落地实现

硬写模拟登录请求的路径已经完全走不通,可落地的实现逻辑如下,全程不需要依赖requests以外的浏览器自动化库:

  1. 在本地日常使用的浏览器中正常完成Google账号全量登录流程,从浏览器开发者工具的应用面板中导出Classroom域名下的全量Cookie,重点保留SAPISID、SID、HSID、SSID、APISID这几个核心认证字段
  2. 把导出的Cookie完整加载到requests.Session对象中,同时把请求头替换成和真实浏览器完全一致的字段(包括User-Agent、Accept、Accept-Language,不能使用requests默认的请求头,否则会被识别)
  3. 直接用配置好的Session发起对目标Classroom页面的请求,即可获取真实页面内容,不需要再走重复的登录流程。

注意:这种方式获取的会话有固定时效,一般24小时左右会失效,需要定期从浏览器重新导出Cookie;如果Google判定账号存在可疑登录风险,即使Cookie有效,后续请求也会被拦截要求重新完成身份验证。

关于模拟登录的补充说明

不要浪费时间硬写接口参数模拟登录:Google的反自动化校验机制会持续迭代,包括动态生成请求签名、校验JS执行的运行环境特征、评估IP风险等级、随机弹出人机验证等。纯requests没有内置JS执行能力,根本无法绕开这些校验规则,就算临时写出能跑通的登录逻辑,过几周就会因为Google更新校验规则完全失效。


内容的提问来源于stack exchange,提问作者Emre Özer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 10:36:05