亲测有效。
git地址:https://github.com/pjialin/py12306
第一步,创建python3虚拟环境
pip install virtualenv
virtualenv venv
virtualenv -p /usr/bin/python3.6 venv
source venv/bin/activate
创建详细教程
https://www.cnblogs.com/technologylife/p/6635631.html
第二步,克隆并安装依赖
git clone https://github.com/pjialin/py12306
cd py12306
pip install -r requirements.txt
第三步,配置配置文件
cp env.py.example env.py
vi env.py
1.填写12306账号密码
# 12306 账号
USER_ACCOUNTS = [
# 目前已支持仅查询,不下单,屏蔽掉下面的账号即可
{
'key': 0, # 如使用多个账号 key 不能重复
'user_name': '12306 user name',
'password': '12306 password'
},
# {
# 'key': 'wangwu',
# 'user_name': '[email protected]',
# 'password': 'wangwu'
# }
]
在USER_ACCOUNTS的列表的第一个字典中填入你的12306的账号(user_name)和密码(password)
2.选择打码方式
打码有‘ruokuai’和‘free’两种模式
作者称free不可持续,建议ruokuai
如果使用若快,将AUTO_CODE_PLATFORM改成‘ruokuai’
若快注册网址为http://www.ruokuai.com/login
注册后将注册的账号密码填入AUTO_CODE_ACCOUNT即可
收费是这样的。1块钱能买2500个豆,登陆打码一次大概花费10-30个豆,感觉最多充5块钱的豆就够了,建议先来1块钱的试试。同时关注其公众号,还能免费获得1000豆。
# 打码平台账号
# 目前只支持免费打码接口 和 若快打码,注册地址:http://www.ruokuai.com/login
AUTO_CODE_PLATFORM = 'ruokuai' # 免费填写 free 若快 ruokuai # 免费打码无法保证持续可用,如失效请手动切换
AUTO_CODE_ACCOUNT = { # 使用 free 可用省略
'user': 'user_name',
'pwd': 'user password'
}
3、设置语音提醒
因为抢到票以后需要及时提醒你去支付,完成订单,所以,建议开启语音提醒功能。
可以在阿里云领取5次免费体验套餐,因为抢票成功后才会使用,所以基本够用
另外收费是1元10次
登陆https://market.aliyun.com/products/57126001/cmapi019902.html
购买或者领取免费套餐后,会得到一个appcode,将其填入NOTIFICATION_API_APP_CODE
# 语音验证码
# 没找到比较好用的,现在用的这个是阿里云 API 市场上的,基本满足要求,价格也便宜
# 购买成功后到控制台找到 APPCODE 放在下面就可以了
# 地址:https://market.aliyun.com/products/57126001/cmapi019902.html
NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音通知
NOTIFICATION_API_APP_CODE = 'app code'
4、配置日期,车次,始发站,终点站信息
首先在left_dates中填入你期望的出发日期,可以是多个,注意格式一定是‘2019-02-02’这种
然后再stations中填入你的始发站和终点站
members中,填入你的乘客名字
seats中填入‘特等座, 商务座, 一等座, 二等座, 软卧, 硬卧, 动卧, 软座, 硬座, 无座’中的一个或者多个
train_numbers,填入车次,如果为空,则为出发日期的所有可抢车次票
QUERY_JOBS = [
{
# 'job_name': 'bj -> sz', # 任务名称,不填默认会以车站名命名,不可重复
'account_key': 0, # 将会使用指定账号下单
'left_dates': [ # 出发日期 :Array
"2019-02-01",
#"2019-01-26",
],
'stations': { # 车站 支持多个车站同时查询 :Dict or :List
'left': '北京',
'arrive': '潍坊',
},
# # 多个车站示例 (建议添加多个,有时多买几站成功率会高一点)
# 'stations': [{
],
'stations': { # 车站 支持多个车站同时查询 :Dict or :List
'left': '北京',
'arrive': '潍坊',
},
# # 多个车站示例 (建议添加多个,有时多买几站成功率会高一点)
# 'stations': [{
# 'left': '北京',
# 'arrive': '深圳',
# },{ # 多个车站示例
# 'left': '北京',
# 'arrive': '广州',
# }],
'members': [ # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如 ['张三', '张三']
"一行数师",
#"王五",
],
'allow_less_member': 0, # 是否允许余票不足时提交部分乘客
'seats': [ # 筛选座位 有先后顺序 :Array
# 可用值: 特等座, 商务座, 一等座, 二等座, 软卧, 硬卧, 动卧, 软座, 硬座, 无座
'二等座',
'硬卧',
#'硬座'
],
'train_numbers': [ # 筛选车次 可以为空,为空则所有车次都可以提交
"G4961",
"K411",
#"K4184"
]
},
第四步,测试
1 测试配置信息
python main.py -t
2 测试通知消息
python main.py -t -n
第五步,开抢
python main.py
抢到票后,会收到语音提示,届时到进入12306的订单查看中进行支付即可。
祝大家抢票顺利,新年快乐。