Python中如何实现12306订票助手
两次扫码解决了 12306 登录、查询、下单到支付的流程。 解决了 12306 订票无法识别验证码、刷票等痛点问题。
GitHub 开源项目: https://github.com/hack12306/12306-booking
Python中如何实现12306订票助手
额,直接执行,没有提示登录,直接开始查询余票了
要实现一个12306订票助手,核心是模拟浏览器操作完成登录、查询、下单等流程。由于12306有复杂的反爬机制,直接请求难度很大,通常使用Selenium这类自动化工具。下面是一个基础示例,展示了如何使用Selenium自动登录12306(需要先安装selenium和对应浏览器驱动):
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# 初始化浏览器驱动(这里用Chrome示例)
driver = webdriver.Chrome()
driver.get("https://kyfw.12306.cn/otn/resources/login.html")
try:
# 等待并点击“账号登录”
account_login = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "login-hd-account"))
)
account_login.click()
# 输入用户名和密码
username_input = driver.find_element(By.ID, "J-userName")
password_input = driver.find_element(By.ID, "J-password")
username_input.send_keys("你的用户名")
password_input.send_keys("你的密码")
# 点击登录按钮
login_btn = driver.find_element(By.ID, "J-login")
login_btn.click()
# 等待登录成功,这里可能需要处理滑块验证码(实际项目需额外处理)
time.sleep(5)
print("登录成功,当前URL:", driver.current_url)
except Exception as e:
print("登录过程中出现错误:", e)
finally:
# 保持浏览器打开,方便观察
input("按Enter键关闭浏览器...")
driver.quit()
这个脚本只是最开始的登录环节。一个完整的订票助手还需要处理:
- 验证码:12306的滑块/点选验证码需要集成打码平台或机器学习模型识别。
- 车票查询:解析查询页面的车次、座位信息。
- 下单:模拟提交订单、选择乘客、提交等步骤。
- 稳定性:处理网络异常、会话过期等情况。
总结:用自动化工具模拟操作是可行的,但验证码和反爬是主要难点。
……要配合浏览器使用啊 = =。我直接在服务器上面跑了
最新的版本调整下策略,先查票,有票才会登录、下单、支付,可以下载下来自己修改下策略
ImportError: No module named six 这是怎么回事儿(⊙_⊙?)
#3 大概明白逻辑了,能加个查到有票通知么,钉钉或者 server 酱的接口可以用
程序 bug, 再更新下程序试试。pip install 12306-booking -U --user
更新之后就好了🐂皮
嗯, 可以考虑支持通知功能
没有增加验证码识别特性,需要通过 12306 的 APP 扫码登录
python3 安装有些许问题 Python2 的选择 BeautifulSoup 进行安装,Python3 的选择 bs4 进行安装
卧擦,老哥你麻城的? 居然能在这里见到老乡。
我的操作系统是 win10,从 https://www.python.org/downloads/windows/ 这里下载的 Python 运行环境。
运行 pip 安装的命令时,会报编码的错误。 错误的具体提示如下:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xac in position 65: illegal multibyte sequence
作为一个只会运行 readme 命令的用户,迫于抢票困境,想请教楼主,这个怎么用?
我是在 Ubuntu1604 桌面中用源码安装的,运行 12306-booking 加参数的命令,测试了一班有票的车次,结果只查询了一次就不动了,我不知道它在等什么🤔️
请楼主赐教,谢谢啦!
感谢反馈,可以在 GitHub 上提 ISSUE,方便回复,跟踪状态
😆😆半个老乡,我不是麻城的,我老婆是麻城的
嗯,对 Windows 支持可能会有问题,只是在 MacOS 测试过
程序目录下有个 app.log 文件,这个里面详细记录了程序的运行日志,还有问题可以在 GitHub 提 issue
https://github.com/hack12306/12306-booking

