Python PNR一键查票:输入号码秒出座位状态——再也不用刷12306
PNR查询, 实时座位, 离线脚本, 零广告, 瑞士军刀
故事开场:一把瑞士军刀救了赶火车的你
周五傍晚,你拎着行李冲向站台,手机信号一格,12306 死活刷不出座位。
广播里列车即将关门,你却不知道到底有没有铺位。
这时,你从口袋掏出“小白瑞士军刀”——pnr_status_checker.py
。
终端里输入:
enter the PNR number
>>> 1234567890
10 秒后屏幕跳出:
train name : Howrah Express
from station : Howrah Jn
to station : New Delhi
chart prepared : True
passenger 1 : CNF S4 23
直接冲上车,安心补票。
痛点解决:再也不用开浏览器、看广告,一条命令实时查座位。
完整代码(≤1000字符,直接展示)
import requests
api_key = "<your API KEY>" # 替换成自己的
base_url = "https://api.railwayapi.com/v2/pnr-status/pnr/"
pnr = input("请输入 PNR 号码:")
url = f"{base_url}{pnr}/apikey/{api_key}/"
data = requests.get(url).json()if data["response_code"] == 200:print("车次:", data["train"]["name"])print("出发:", data["from_station"]["name"])print("到达:", data["to_station"]["name"])print("日期:", data["doj"])print("图表已生成:" if data["chart_prepared"] else "图表未生成")for p in data["passengers"]:print(f"乘客{p['no']}:{p['current_status']} / {p['booking_status']}")
else:print("未找到记录")
代码解析
功能块 1:一键拼 URL
把 PNR 和 API Key 拼成完整请求,零配置。
url = f"{base_url}{pnr}/apikey/{api_key}/"
功能块 2:状态解析
response_code == 200
即成功,直接读 JSON 里的车次、座位。
if data["response_code"] == 200:print("车次:", data["train"]["name"])
功能块 3:乘客循环
循环打印每位乘客的当前/预订状态,一目了然。
for p in data["passengers"]:print(f"乘客{p['no']}:{p['current_status']}")
如果还想更厉害
扩展点子 1:命令行参数
加 --pnr 1234567890
,脚本秒跑。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--pnr', required=True)
args = parser.parse_args()
扩展点子 2:GUI 输入框
用 tkinter
做窗口,输入 PNR 即查询。
import tkinter.simpledialog as sd
pnr = sd.askstring("PNR", "请输入 PNR 号码")
总结
pnr_status_checker.py
这把 30 行瑞士军刀,把“开浏览器→登录→验证码→排队”四步压缩成“输入 PNR+回车”。
你无需账号、无需广告,就能在 Windows/Mac/Linux 上秒查列车座位。
再加两行参数或 GUI,它就从脚本升级成随身票务助手。
下次再赶火车,直接敲命令,座位实时到手!
源码获取
完整代码已开源,包含详细的注释文档:
🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG