
前言
本内容仅用于技术交流学习,严禁商用;爬取行为需遵守网站协议及法律规定,如有侵权请联系删除。
雨课堂网页版的登录流程
- 在https://www.yuketang.cn/web?next=/v2/web/index&type=3页面加载完毕后,客户端与服务端建立websocket链接。
- 随即客户端发送一段数据,用于请求微信二维码。
- 服务端拿到数据后反馈二维码相关信息。
- 并每隔一段时间重新发送一次二维码信息。
- 客户端根据信息去请求二维码图片。
- 用户扫码,由移动客户端发送信息至服务端确认用户正在登录。
- 服务端再通过websocket发送登录的相关信息回客户端。
- 客户端拿到登录的相关信息后post到login接口进行登录,至此登录成功。

具体步骤
一、找到websocket接口
雨课堂的websocket接口为wss://www.yuketang.cn/wsapp/

二、查看websocket数据交流情况
| 数据内容 | 长度 | 时间 |
|---|---|---|
| {"op":"requestlogin","role":"web","version":1.4,"type":"qrcode","from":"web"} | 77 | 23:06:57.966 |
| {"op":"requestlogin","loginid":"7e3115fc-ce02-439f-9e95-f7cc797f6b13","expire_seconds":60,"ticket":"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQG_8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyUGRSMEZUN2pkczExNENHU2hGY3EAAgSmLy1pAwSAOgkA","qrcode":"http://weixin.qq.com/q/02PdR0FT7jds114CGShFcq"} | 306 | 23:06:57.996 |
登录之后发现多了一串数据
{
"subscribe_status": true,
"AppOpenID": "",
"profile_edit_status": false,
"UserID": "",
"DateJoined": "2025-03-22T00:12:43",
"Role": 0,
"LastLogin": "2025-12-03T23:22:35",
"Department": "",
"WeixinUnionID": "",
"LastLoginIP": "",
"noRecArticle": true,
"Auth": "",
"ppt_config_data": {},
"Nickname": "",
"School": "",
"Name": "",
"Language": "zh-cn",
"Gender": 0,
"YearOfBirth": null,
"is_self_set": false,
"Avatar": "",
"Position": null,
"subscribe_message_templates": [],
"MinaOpenID": "",
"isBind": true,
"user_on_lessons": [],
"AndroidOpenID": "",
"op": "loginsuccess",
"loginid": "***"
}关键信息是里面的UserID和Auth
三、登录
将之前获得的UserID和Auth POST到https://www.yuketang.cn/pc/web_login获取sessionid与csrftoken。然后就登录成功了
下面是代码
import requests
import websocket
import json
import cv2 as cv
import numpy as np
session = requests.Session()
user_info = {}
def on_message(ws, msg):
global user_info
user_info = json.loads(msg)
if 'subscribe_status' in user_info:
ws.close()
return
# 显示二维码
resp = session.get(user_info['ticket'])
img = cv.imdecode(np.array(bytearray(resp.content), np.uint8), cv.IMREAD_UNCHANGED)
cv.imshow('登录码', img)
cv.waitKey(0)
cv.destroyAllWindows()
# 建立WS连接
ws = websocket.WebSocketApp("wss://www.yuketang.cn/wsapp/", on_message=on_message, on_error=lambda ws, e: print(e))
ws.on_open = lambda ws: ws.send(json.dumps({"op":"requestlogin","role":"web","version":1.4,"type":"qrcode","from":"web"}))
ws.run_forever()
req = session.post("https://www.yuketang.cn/pc/web_login",data=json.dumps({'UserID':user_info['UserID'],'Auth':user_info['Auth']}))
print(req.json())
# 获取课程列表
req = session.get("https://www.yuketang.cn/v2/api/web/courses/list?identity=2")
print(json.loads(req.content))长江雨课堂,荷花雨课堂等一样只需要改个前缀即可
评论 (0)