告别笨重浏览器:awesome-python-login-model的GitHub纯requests模拟登录完整代码解析
【免费下载链接】awesome-python-login-model😮python模拟登陆一些大型网站,还有一些简单的爬虫,希望对你们有所帮助❤️,如果喜欢记得给个star哦🌟项目地址: https://gitcode.com/gh_mirrors/aw/awesome-python-login-model
awesome-python-login-model 是一个用 Python 模拟登录各大网站的开源项目,覆盖 GitHub、百度、微博、微信网页版等 20 多个站点。本文以项目中最精炼的 GitHub 模拟登录程序为例,完整拆解纯 requests 模拟登录的原理与代码细节,帮你看懂它如何不启动浏览器、仅靠几十行代码就完成账号登录。
上图:运行 GitHub 模拟登录脚本后的终端输出,状态码与登录用户名一目了然。
为什么放弃 Selenium,改用纯 requests?
用 Selenium + WebDriver 驱动浏览器登录,稳定但笨重:要下载 chromedriver、拉起完整的 Chrome 进程、等待页面渲染,一次登录动辄十几秒。
而项目作者在 README.md 的 About 一节里点出了核心思路:
模拟登陆基本采用的是直接登录或者使用 selenium+webdriver 的方式……登录过后把 cookie 维护起来,然后调用 requests 或 scrapy 进行数据采集,这样数据采集的速度可以得到保证。
也就是说,纯 requests 方案的优势在于:
- ⚡快:无浏览器进程,一次登录只需两三个 HTTP 请求
- 🪶轻:无需匹配 chromedriver 版本,无头环境也能跑
- 🔁可复用:拿到 cookie 后,后续爬取直接复用会话
GitHub 模拟登录:三步走完整流程
核心源码在 Github/login.py,整个登录过程可以概括为:GET 登录页取 token → POST 表单提交 → 解析页面验证结果。
第一步:GET 登录页,正则截取 authenticity_token
GitHub 登录页里有一个隐藏的防跨站伪造(CSRF)字段authenticity_token,必须先取到它,登录才会被服务端接受。代码见 login.py 的 get_token 方法:
- 用同一个
requests.Session()发起 GET,访问登录页 - 用正则
name="authenticity_token" value="(.*?)"从 HTML 中抠出 token
这一步同时完成了 cookie 的初始化——Session 会自动保存服务器下发的 cookie,并在后续请求中带上。
第二步:POST 表单完成登录
拿到 token 后,组装表单数据并提交到登录接口(login.py 的 login_GitHub 方法):
post_data = { 'commit': 'Sign in', 'utf8': '✓', 'authenticity_token': self.get_token(), 'login': self.email, 'password': self.password } resp = self.session.post(self.post_url, data=post_data, headers=self.headers)注意两个细节:
self.headers里设置了仿真的User-Agent和Referer(第14-18行),模拟真实浏览器身份- 提交用的是同一个 Session,保证 token 对应的 cookie 被一并携带
第三步:验证登录结果
服务器返回 200 不代表登录成功。代码从响应 HTML 的 meta 标签中提取用户名来确认(第41-43行):
match = re.search(r'"user-login" content="(.*?)"', resp.text)能匹配到用户名,说明 cookie 已生效,登录完成。
纯 requests 登录的 4 个通用技巧
从 login.py 可以提炼出一套通用的纯 requests 登录方法论:
| 技巧 | 说明 | 项目中的体现 |
|---|---|---|
| Session 会话管理 | 用requests.Session()统一管理 cookie,多次请求共享登录态 | 第20行self.session = requests.Session() |
| UA 伪装 | 伪造 Chrome 的 User-Agent,避免被识别为脚本 | 请求头中的User-Agent字段 |
| 动态 Token | 先从登录页抓取 authenticity_token 等防伪造参数 | get_token()方法 |
| 密码安全输入 | 用getpass输入密码,终端不回显 | 第65行getpass('Password:') |
项目里还有这些 requests 登录实战
GitHub 只是入门款,项目里还有几个更典型的纯 requests 登录实现,值得对照学习:
百度 —— RSA 密码加密:密码不能明文传输,需要两步取参(token → RSA 公钥),再用公钥加密密码后提交。加密工具函数封装在 baidu/util.py 的encrypt_pwd中,主流程见 baidu/baidu.py 的login方法,还处理了图形验证码的分支。
Facebook —— cookie 判成功:提交后不解析页面,而是检查响应 cookie 中是否出现c_user字段,有则登录成功,并顺带提取反爬参数fb_dtsg,见 facebook/facebook.py。
微博 —— 时间戳签名:用手机号+密码+时间戳做 MD5 生成 sign 参数,伪装成手机客户端登录,见 sina/sina.py。
微信网页版 —— 二维码登录流:不输密码,纯 requests 轮询实现扫码登录:获取 uuid → 拉取二维码图片 → 轮询登录状态 → 解析 XML 拿到 skey 等会话参数 → 拉取好友列表,全流程在 webWeixin/webWeixin.py 中。
微信网页版登录成功后获取好友列表的测试截图。
登录只是起点:cookie 复用与爬虫协作
对数据采集场景,登录的意义在于拿到可长期复用的 cookie。项目 README 的 About 一节正是这个思路:先用登录程序(哪怕是 selenium)拿 cookie,之后全部用 requests/scrapy 高速爬取。
Bilibili 自动登录测试演示(成功率 98%):这类 JS 重度站点用 Selenium 登录更省事,登录后可切换轻量请求方案采集数据。更多测试截图可参考 README-Test.md。
新手上手建议
- 🎯从简单的开始:建议按 GitHub → Facebook → 微博 → 百度的顺序读代码,难度递增,正好覆盖 token、cookie 验证、签名、加密四类场景
- 🛡️尽量规避验证码:作者在 README 的 Problems 一节提示,项目中的方法均未处理复杂验证码,实操中优先选择验证码门槛低的入口
- ⚠️代码可能失效:网站改版会导致接口变化,遇到失效代码可提 Issue 或提交 PR 修复
- 🔐仅用于学习交流:本项目声明仅用于学习和交流,请勿用于任何违规用途
掌握纯 requests 模拟登录后,你就可以把精力从"驱动浏览器"转向真正的数据价值上——毕竟,登录只是敲门砖,效率才是爬虫的底色。
【免费下载链接】awesome-python-login-model😮python模拟登陆一些大型网站,还有一些简单的爬虫,希望对你们有所帮助❤️,如果喜欢记得给个star哦🌟项目地址: https://gitcode.com/gh_mirrors/aw/awesome-python-login-model
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考