集成云码验证码识别API,实现南京大学统一身份认证自动登录,自动获取电费查询所需cookie。
┌──────────────────────┐
│ 1. 加载配置文件 │
│ /tmp/username │
│ /tmp/password │
│ /tmp/token │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 2. 访问登录页面 │
│ 获取页面参数 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 3. 下载验证码图片 │
│ 保存到 /tmp/captcha.png│
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 4. 云码API识别验证码 │
│ 自动获取验证码文本 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 5. AES加密密码 │
│ 提交登录请求 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 6. 获取登录Cookie │
│ 保存到 /tmp/cookie.json│
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 7. 验证Cookie有效性 │
│ 使用validate_cookie.py│
└──────────────────────┘
# 用户名(学号)
echo "your_username" > /tmp/username
# 密码
echo "your_password" > /tmp/password
# 云码API Token(从 https://zhuce.jfbym.com 注册获取)
echo "your_yunma_token" > /tmp/token
pip install -r requirements.txt
python scripts/nju_auto_login.py
在工作流中添加步骤:
- name: Auto Login and Get Cookie
run: |
# 写入配置文件
echo "$" > /tmp/username
echo "$" > /tmp/password
echo "$" > /tmp/token
# 执行自动登录
python scripts/nju_auto_login.py
# 将cookie设置为GitHub Secret
COOKIE_JSON=$(cat /tmp/cookie.json)
echo "EPAY_COOKIE=$COOKIE_JSON" >> $GITHUB_ENV
- name: Validate Cookie
run: |
python scripts/validate_cookie.py /tmp/cookie.json
# 1. 读取验证码图片
with open('/tmp/captcha.png', 'rb') as f:
image_data = f.read()
# 2. 转为base64
image_base64 = base64.b64encode(image_data).decode('utf-8')
# 3. 调用API
payload = {
"token": "your_token",
"type": "10103",
"image": image_base64
}
response = requests.post(YUNMA_API_URL, json=payload)
# 4. 获取结果
result = response.json()
if result["code"] == 10000:
captcha_text = result["data"]["data"]
| 类型ID | 说明 | 适用场景 |
|---|---|---|
| 10110 | 通用数英1-4位 | 简单验证码 |
| 10111 | 通用数英5-8位 | 中等难度 |
| 10103 | 通用数英1~6位plus | 推荐,识别率高 |
| 10114 | 通用中文1~2位 | 中文验证码 |
| 50100 | 通用数字计算题 | 计算题验证码 |
登录成功后,使用 validate_cookie.py 验证cookie:
python scripts/validate_cookie.py /tmp/cookie.json
输出示例:
✓ Cookie is valid
✓ Successfully authenticated to epay.nju.edu.cn
原因: 验证码图片不清晰或类型不匹配
解决:
/tmp/captcha.png 是否正确下载可能原因:
解决:
# 检查配置文件
cat /tmp/username
cat /tmp/password
# 手动测试
python scripts/nju_login.py # 手动输入验证码
原因: Cookie过期或格式错误
解决:
validate_cookie.py 验证/tmp 临时文件云码验证码识别费用:
优化建议:
============================================================
南京大学统一身份认证自动登录
============================================================
[1] 访问登录页面...
状态码: 200
执行ID: e1s68175481518598196...
[2] 获取验证码...
状态码: 200
已保存到: /tmp/captcha.png
[验证码识别]
图片路径: /tmp/captcha.png
✓ 识别成功: a3b7
[3] 加密密码...
✓ 密码已加密
[4] 提交登录...
状态码: 200
最终URL: https://authserver.nju.edu.cn/authserver/login
[5] 检查登录结果...
✓ 登录成功!
[Cookie已保存]
文件: /tmp/cookie.json
数量: 2 个
- JSESSIONID: ABCD1234567890EFGHI...
[6] 验证Cookie...
✓ Cookie验证成功
============================================================
登录流程完成!Cookie已保存到 /tmp/cookie.json
============================================================
scripts/nju_auto_login.py - 自动登录主脚本scripts/nju_login.py - 手动登录脚本scripts/validate_cookie.py - Cookie验证脚本/tmp/username - 用户名配置/tmp/password - 密码配置/tmp/token - 云码API token/tmp/cookie.json - 输出的cookie文件