#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
req = requests.session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
def login():
# 获取验证码图片
pic_response = req.get(
'https://kyfw.12306.cn/passport/captcha/captcha-image'
'?login_site=E&module=login&rand=sjrand'
)
# 保存验证码图片
codeImage = pic_response.content
fn = open('code.png', 'wb')
fn.write(codeImage)
fn.close()
# 手动输入验证码坐标
print("请查看 code.png 输入验证码坐标")
codeStr = input('请输入验证码坐标:')
# 提交验证码验证
data = {
'answer': codeStr,
'rand': 'sjrand',
'login_site': 'E'
}
response = req.post(
'https://kyfw.12306.cn/passport/captcha/captcha-check',
data=data,
headers=headers
)
print(response.text)
# 进阶版:使用OCR自动识别
def ocr_captcha():
"""
使用百度OCR或腾讯OCR识别验证码
需要安装: pip install aip
"""
from aip import AipOcr
# 配置百度OCR
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 获取图片
image = get_captcha_image()
# 识别图片中的文字
result = client.basicGeneral(image)
print("识别结果:", result)
if __name__ == '__main__':
login()
本地运行方法:
- 安装依赖:
pip install requests
- 保存代码为
captcha.py
- 运行:
python captcha.py
- 查看生成的验证码图片
- 输入验证码坐标
进阶版(OCR自动识别):
- 注册百度AI账号
- 安装:
pip install baidu-aip
- 配置API密钥
- 运行OCR识别版本
技术要点:
- 12306验证码为点选式
- 需要返回选中图片的坐标
- 坐标格式:x,y(多个用逗号分隔)