12306购票小助手:春节回家的秘密武器
创作时间:
作者:
@小白创作中心
12306购票小助手:春节回家的秘密武器
随着春节临近,“一票难求”成为许多人的难题。而“12306购票小助手”作为一款高效的自动化辅助工具,利用AI技术自动识别验证码、智能候补等功能,帮助用户在购票高峰期轻松抢到车票。无论是个人返乡还是帮家人朋友购票,这款开源项目都是你归家路上不可或缺的好帮手。
01
工作原理与技术要点
该购票小助手基于Python语言开发,主要使用了Selenium库来实现浏览器自动化操作。整个脚本可以分为以下几个核心功能模块:
- 登录模块:模拟用户登录12306网站,由于12306的验证码机制,登录过程需要用户手动输入验证码。
def login():
driver.get("https://kyfw.12306.cn/otn/resources/login.html")
driver.find_element(By.ID, "J-userName").send_keys(config['ACCOUNT']['username'])
driver.find_element(By.ID, "J-password").send_keys(config['ACCOUNT']['password'])
driver.find_element(By.ID, "J-login").click()
print("请手动完成短信验证...")
WebDriverWait(driver, 120).until(EC.url_contains("index/init"))
- 查询模块:根据配置文件中的出发地、目的地和日期信息,自动查询车票。
def query_tickets():
driver.find_element(By.XPATH, "//a[@id='dc']").click()
driver.find_element(By.ID, "fromStationText").send_keys(config['TRAVEL']['from_station'])
driver.find_element(By.ID, "toStationText").send_keys(config['TRAVEL']['to_station'])
driver.find_element(By.ID, "train_date").send_keys(config['TRAVEL']['date'])
driver.find_element(By.ID, "query_ticket").click()
- 监控模块:定时检查余票情况,一旦发现有票立即下单。
def monitor_tickets():
try:
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@id='t-list']"))
)
trains = driver.find_elements(By.XPATH, "//tr[contains(@id,'ticket_')]")
for train in trains:
train_num = train.find_element(By.CLASS_NAME, "number").text
seats = {
'二等座': train.find_element(By.XPATH, ".//td").text,
'一等座': train.find_element(By.XPATH, ".//td").text
}
if seats['二等座'] != '无' or seats['一等座'] != '无':
submit_order(train)
return True
except Exception as e:
print(f"查询异常: {str(e)}")
return False
- 下单模块:自动选择乘客、提交订单并确认座位。
def submit_order(train):
train.find_element(By.CLASS_NAME, "btn72").click()
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@id='normal_passenger_id']/ul/li/label"))
)
driver.find_element(By.ID, "normalPassenger_0").click()
driver.find_element(By.ID, "submitOrder_id").click()
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "qr_submit_id"))
)
driver.find_element(By.ID, "qr_submit_id").click()
print("抢票成功!请及时支付!")
- 定时任务:使用schedule库每10秒执行一次监控任务。
def job():
if not monitor_tickets():
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')} 无票,继续监控...")
if __name__ == "__main__":
login()
query_tickets()
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
02
使用步骤与配置方法
环境准备:
- 安装Python 3.9及以上版本
- 安装所需库:
pip install selenium schedule
- 下载与本地Chrome版本匹配的ChromeDriver
配置文件:编辑
config.ini
文件,填写账号信息和购票需求
[ACCOUNT]
username = 您的12306账号
password = 您的密码
[TRAVEL]
from_station = 北京
to_station = 上海
date = 2025-02-20
- 运行脚本:执行Python脚本,按照提示完成登录验证
03
注意事项
验证码问题:由于12306的验证码机制,登录时需要手动输入验证码。建议使用短信验证方式。
反爬机制:脚本使用无头浏览器模式运行,但频繁请求可能会触发12306的反爬机制。建议合理设置查询间隔时间。
支付问题:脚本只能完成到提交订单的步骤,最终支付需要用户手动完成。建议提前准备好支付方式。
稳定性:长时间运行可能会出现登录过期等问题,建议每小时检查一次登录状态,必要时重新登录。
04
法律与道德提醒
本工具仅供个人使用,不得用于商业用途或大规模抢票行为。
使用过程中需遵守《中华人民共和国网络安全法》,不得干扰正常的售票系统运行。
建议优先使用12306官方的候补购票功能,本工具仅作为辅助手段。
通过以上介绍,相信你已经了解了12306购票小助手的基本功能和使用方法。在春运高峰期,合理利用这款工具,可以大大提高购票效率,让你的回家之路更加顺畅。祝你早日抢到车票,平安回家!
热门推荐
15分钟干蒸蒜蓉豉汁排骨(空气炸锅版)
低保办理流程详解:从申请到领取的完整指南
美甲师的制作美甲流程
购车合同中的质量保证期限条款解析
沈阳为什么叫奉天?揭秘这座城市的前世今生
大学物理:滚动与滑动的比较分析
2025广州中考报名今日启动!这份报名指南请查收
这种病,会使人变成“玻璃人”丨健康总动员
感冒能吃牛肉吗
登顶首富的马斯克,为什么总能“吹牛成真”?
青光眼患者的日常生活指南
职场小白最应该了解的试用期法律规定
气动紧急切断阀的定期维护与保养指南
萧宝卷:齐明帝萧鸾次子,继位后大兴土木,生活奢侈荒淫
颗粒捕捉器对汽车有何影响
颗粒捕捉器对车辆油耗有多大影响?
新生儿抚触:必要性、好处与正确方法全解析
想用普通镜头拍微距 先来了解一下微距镜头与普通镜头的区别吧
英国南浦顿大学海商法研究:理论与实践的完美结合
韩国海商法大学:探究海洋法律的国际化发展
AI也会写歌评|《一字乡愁》歌词赏析|2025开篇
门前适合种罗汉松树吗(探究罗汉松树的适宜生长环境和种植方法)
西安十大名小吃,你尝过几道?
唱豫剧、说河南话......这群来豫留学生真中!
蒸鸡蛋羹口感大不同:温水VS凉水,这样做最嫩滑
高致病性禽流感病毒H5N1跨种传播全球肆虐!疫苗将如何应对?
南京大学工程管理学院:一所年轻学院的蓬勃发展之路
天津什么时候去最好看?去天津的最佳时间
材质决定品质:深度解析毛绒玩具的材质选择技巧!
不管什么牌子的手机,千万不要套手机壳,多亏维修师傅提醒!