Python中如何实现某课网的H5登录

某课网的课程还不错,无奈只能在移动端做缓存,上班划水总不能看着手机吧,于是写了个项目去下载视频,刚刚将登录部分的代码整理上传到了 GitHub,代码尽量整洁了,请轻拍,后续会把下载功能也整理进去,欢迎 Star。

代码仓 https://github.com/xiaoq1024/imooc


Python中如何实现某课网的H5登录
3 回复

要模拟某课网的H5登录,核心是分析其登录接口的请求参数,特别是加密部分。通常这类网站会对密码进行加密,并且需要处理验证码和会话状态。

下面是一个完整的示例,展示了如何通过分析登录流程来用Python实现登录。这里假设登录接口是https://www.xxx.com/api/login,密码经过RSA加密,并且需要携带验证码。

import requests
import json
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

def login(username, password, captcha):
    # 1. 创建会话,维持cookies
    session = requests.Session()
    
    # 2. 通常需要先获取一些必要的token或公钥
    # 这里假设从某个接口获取RSA公钥
    init_resp = session.get('https://www.xxx.com/api/init')
    init_data = init_resp.json()
    public_key = init_data['public_key']  # 假设返回中有公钥
    
    # 3. 使用RSA公钥加密密码
    rsa_key = RSA.import_key(public_key)
    cipher = PKCS1_v1_5.new(rsa_key)
    encrypted_password = cipher.encrypt(password.encode())
    # 通常需要base64编码
    b64_password = base64.b64encode(encrypted_password).decode()
    
    # 4. 构造登录数据
    login_data = {
        'username': username,
        'password': b64_password,
        'captcha': captcha,
        # 可能还有其他固定或动态参数,如时间戳、token等
        'client': 'web',
        'remember': 'true'
    }
    
    # 5. 设置请求头,模拟浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Content-Type': 'application/json',
        'Referer': 'https://www.xxx.com/login'
    }
    
    # 6. 发送登录请求
    login_url = 'https://www.xxx.com/api/login'
    response = session.post(login_url, data=json.dumps(login_data), headers=headers)
    
    # 7. 检查登录结果
    result = response.json()
    if result.get('code') == 200:
        print("登录成功!")
        # 登录后的session可以用于后续请求
        return session
    else:
        print(f"登录失败: {result.get('message')}")
        return None

# 使用示例
if __name__ == "__main__":
    # 这些参数需要根据实际情况获取
    # 验证码可能需要先通过其他接口获取图片并手动/自动识别
    my_session = login('your_username', 'your_password', 'captcha_code')
    if my_session:
        # 使用my_session进行后续操作
        profile = my_session.get('https://www.xxx.com/api/profile')
        print(profile.json())

关键点说明:

  1. 使用Session:保持cookies,这样登录后的状态才能维持。
  2. 参数分析:这是最关键的步骤。你需要用浏览器的开发者工具(F12),在登录时抓包,查看实际发送的请求:
    • 找到登录的POST请求
    • 查看Form DataPayload里的所有参数
    • 特别注意像password这样的字段,看它是不是被加密了,以及加密方式
  3. 加密处理:常见的加密方式有RSA、AES,或者网站自定义的加密。示例中展示了RSA加密的方法,你需要根据实际分析结果来调整。
  4. 请求头:模拟浏览器,特别是User-AgentContent-Type等,有时RefererOrigin也很重要。
  5. 验证码:如果网站有验证码,你需要先处理它。可能是简单的图片验证码,也可能是更复杂的滑动、点选等,处理方式各不相同。

具体到某课网:你需要实际去分析它的登录流程。每个网站的细节都可能不同,比如加密算法、必需的参数等。核心思路就是抓包分析,然后用代码模拟同样的请求。

总结:抓包分析,模拟请求。


点个赞老哥,等下载,

网易云的可以吗?

回到顶部