ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

12306购票小助手更新日志全解读:从 2017 到 2019 的功能演进与关键配置变迁

12306购票小助手更新日志全解读:从 2017 到 2019 的功能演进与关键配置变迁 RPA【免费下载链接】1230612306智能刷票订票项目地址https://gitcode.com/gh_mirrors/12/12306点击查看免费下载本文以仓库 Update.md 的完整更新记录为主线梳理 12306 购票小助手从 2017 年 5 月到 2019 年 9 月期间的功能演进脉络自动登录、自动打码、小黑屋、CDN 轮询、双订票接口、server 酱通知、智能候补等核心能力如何一步步落地。读者可通过本文掌握每个版本迭代背后的配置项语义从早期 yaml 到如今的 TickerConfig.py 单文件配置、关键开关的作用与取值范围并结合 run.py、agency/cdn_utils.py、config/urlConf.py 等源码理解底层实现原理从而正确配置与运行这套刷票程序。一、更新日志概览一条时间线看懂项目演进Update.md 记录了项目约两年半的迭代历史可以划分为四个阶段阶段时间范围主题代表性能力起步期2017.5 – 2018.1.12登录修复、配置化、稳定性登录错误判断、自动配置、小黑屋、手动打码、邮箱通知效率期2018.1.13 – 2018.12挂机、捡漏、打码平台、CDN挂机休眠、捡漏防封 IP、打码兔/若快、CDN 轮询、双订票接口冲刺期2019.1 – 2019.4下单模式、跨平台、通知渠道预售踩点、Python 3 支持、server 酱推送、GUI 界面功能收敛期2019.8 – 2019.9配置重构、候补订单移除 yaml 改 py 配置、TICKET_TYPE 反复迭代、智能候补值得注意的是从 2019.08.31 起项目明确放弃支持 python2.7只支持 3.6 以上版本——这一约束至今仍保留在入口代码中init/select_ticket_info.py 的get_ticket_info会在 Python 版本低于 3.6 时直接抛出异常。二、起步期从登录修复到自动化雏形2017.5 – 2018.1.121. 登录错误判断与接口字段校验2017.5.13 的更新是本日志的第一条记录聚焦三类修复增加登录错误判断区分密码错误与IP 校验失败两种登录失败场景避免程序在登录失败后盲目继续刷票修改queryOrderWaitTime接口的解析逻辑修复校验orderId、msg、messages三个字段时可能引发的 bug修改checkQueueOrder对data字段的列表推导式 bug。这一时期的修复对象至今仍是项目核心模块。inter/QueryOrderWaitTime.py 中sendQueryOrderWaitTime的响应解析仍遵循同样的字段约定status为真时读取data并依次检查data.orderId下单成功、data.msg失败原因、data.waitTime剩余等待毫秒数外层再检查messages字段——这正是当年 bug 修复后沉淀下来的健壮解析逻辑。同时该版本增加代理 IP 方法目前已可以过滤有用 IP对应仓库中的 agency 目录与 UnitTest/TestAll.py 中的代理测试用例。2. 自动配置从硬编码走向参数化2018.1.72018.1.7 版本引入了自动配置概念日志中给出了第一代配置参数说明#station_date:出发日期格式ex2018-01-06 #from_station: 始发站 #to_station: 到达站 #set_type: 坐席(商务座,二等座,特等座,软卧,硬卧,硬座,无座) #is_more_ticket:余票不足是否自动提交 #select_refresh_interval:刷新间隔时间1为一秒0.1为100毫秒以此类推 #ticke_peoples: 乘客 #damatu打码图账号用于自动登录这些字段的语义在今天的 TickerConfig.py 中均有对应并做了进一步扩展STATION_DATES出发日期列表源码中 config/configCommon.py 的checkDate会校验日期必须落在今天到今天 29 天maxDate 29之间非法日期自动忽略FROM_STATION/TO_STATION车站名通过 station_name.txt 映射为 12306 的站码见select_ticket_info.station_tableSET_TYPE坐席列表通过 config/configCommon.py 的seat_conf字典映射为 12306 坐席代码如二等座 → 30IS_MORE_TICKET余票不足时是否删减乘车人、按余票数提交2018.9.21 更新中又强调为余票不足优先提交功能TICKET_PEOPLES乘车人列表。值得注意的差异当年的select_refresh_interval刷新间隔在 2018.1.25 更新中被删除理由是无用字段2018.9.21 起改为随机 1–3 秒刷新日志称经测试很稳定不会封 ip对应 TickerConfig.py 中的MIN_TIME 1、MAX_TIME 3注释明确保护 12306 官网请求频率设置随机请求时间原则为 5 分钟不大于 80 次。damatu打码兔账号也已被 config/getCookie.py 与打码平台配置取代。3. 小黑屋对抗僵尸票的熔断机制2018.1.82018.1.8 增加小黑屋功能防止僵尸票无实际余票却反复返回有票的脏数据导致程序一直下单失败、错过真实车票。其核心常量定义在 config/TicketEnmu.pyTICKET_BLACK_LIST_TIME 5 # 加入小黑屋的等待时间默认5 min QUERY_IN_BLACK_LIST u该车次{} 正在被关小黑屋跳过此车次 QUEUE_JOIN_BLACK u排队发现未知错误{0}将此列车 {1}加入小黑屋即某车次若多次下单失败或排队异常会被关进小黑屋并在默认 5 分钟对应 TickerConfig.py 的TICKET_BLACK_LIST_TIME 5内跳过避免浪费刷票窗口。同一版本还支持了多账号同时订票与按选定车次筛选购买车次。4. 手动打码与下单验证码2018.1.92018.1.9 引入手动打码方案日志给出了清晰的实现思路1.调用PIL显示图片 2.图片位置说明验证码图片中每个图片代表一个下标依次类推12345678 3.控制台输入对应下标按照英文逗号分开即可手动完成打码该方案只作用于登录接口不影响下单效率日志同时建议服务器环境使用打码兔自动打码。此后 2018.1.23 更新明确is_auto_code字段语义改为全部自动 / 全部手动即True时所有验证码含提交订单验证码自动打码False时全部手动打码并特别提示CentOS 不可设置手动打码。同一版本还修复了无座和硬座的座位号提交是个字符串的问题并增加校验下单需要验证码功能——下单验证码是 12306 在提交订单环节的二次风控仓库 inter/ 目录下的CheckRandCodeAnsyn.py、GetRandCode.py即对应实现。2018.1.10 又修复了二等座的余票数返回为字符串的问题inter/Query.py 中余票解析。5. 邮箱通知2018.1.132018.1.13 增加邮箱功能日志给出的配置格式为#is_email: 是否需要邮件通知 ex: True or False 切记邮箱加完一定要到config目录下测试emailConf功能是否正常 #email: 发送的邮箱地址 ex: 1qq.com #notice_email_list: 被通知人邮箱 ex: 2qq.com #username: 邮箱账号 #password: 邮箱密码 #host: 邮箱地址如今对应 TickerConfig.py 中的EMAIL_CONF字典IS_MAIL、email、notice_email_list、username、password、host。实现位于 config/emailConf.pysendEmail使用smtplib.SMTP_SSL发送、失败时回退普通SMTP支持多收件人receiver.split(,)主题固定为恭喜您已订票成功。切记到 config 目录下测试 emailConf 功能这一提醒演变为今日 run.py 的python3 run.py t命令——它会同时调用sendEmail与sendServerChan发送测试消息。三、挂机与捡漏稳定性与效率并进2018.1.14 – 2018.91. 挂机功能与休眠时段2018.1.14 优化挂机功能将此前到 11 点自动跳出改为到早上 7 点自动开启刷票并说明需将is_auto_code设为True2018.1.15 又把休眠时间改为早上 6 点。今天的规则在 config/configCommon.py 中固化maxRunTime 6 # 最早运行时间 maxRunStopTime 23 # 程序停止时间checkSleepTime判断当前小时 23 或 6时打印12306 休息时间sleep 至次日 6 点后调用session.call_login()重新登录继续刷票。也就是说程序每天 6:00–23:00 运行、夜间自动休眠这既是配合 12306 放票节奏也是保护账号的一种节流策略。2. 捡漏与无限排队修复2018.1.15增加捡漏自动检测是否登录功能日志建议捡漏刷新不要太快2S 最好否则会封 IP修复提交订单有很大记录无限排队的情况——这是后来排队超时自动取消订单的前置问题排队超时兜底机制2018.1.21 增加排队超过一分钟自动取消订单。其实现见 inter/QueryOrderWaitTime.pysendQueryOrderWaitTime循环请求排队状态num超过ticket.OUT_NUM 120config/TicketEnmu.py即调用queryMyOrderNoComplete查询未完成订单并cancelNoCompleteMyOrder自动取消避免占用车票额度。3. 打码平台化打码兔与若快2018.1.232018.1.23 引入若快平台打码yaml 新增字段auto_code_type1 打码兔2 若快。如今演变为 TickerConfig.py 中的AUTO_CODE_TYPE与打码服务器配置IS_AUTO_CODE True # 是否自动打码 AUTO_CODE_TYPE 3 # 2本地自动打码(tensorflowkeras)3云打码 HOST 120.77.154.140:8000 # 云打码服务器地址 REQ_URL /verify/base64/ HTTP_TYPE http若快打码在 2019.08.31 更新中被移除。本地打码依赖仓库根目录的模型文件12306.image.model.h5、model.v2.0.h5调用链位于 verify/ 目录localVerifyCode.py、pretreatment.py、mlearn_for_image.py。云打码接口autoVerifyImage定义在 config/urlConf.py其 Host 直接读取TickerConfig.HOST。4. 多日期查询与车次筛选2018.1.212018.1.21 增加多日期查询请严格按照 yaml 格式添加并提示多日期查询耗时更长。现在对应STATION_DATES列表配置日期合法性由configCommon.checkDate校验超出可售期自动忽略。同一版本还合并了 dev 分支、恢复12306 改版引起的订票功能、增加派对失败自动取消订单并优化接口请求规范。四、CDN 轮询与双订票接口2018.1.29 – 2018.121. CDN 轮询快人一步与躲避封 IP2018.1.292018.1.29 增加 CDN 轮询功能日志列出的优势包括一定程度躲避封 IP、查询余票快人一步、提交订单快人一步、僵尸票变少。开关为is_cdn1 开启 CDN2 普通查询对应今天 TickerConfig.py 的IS_CDN 1。底层实现位于 agency/cdn_utils.pyfilterCdn()读取 cdn_list 中的候选 IP按每 50 个一组开多线程CDNProxy线程类请求loginInitCdn接口测延时响应message字段且耗时 3000ms日志注释写为 1000ms的 IP 记入cdn_listsortCdn()按延时排序后写入 filter_cdn_list供运行时随机取用。init/select_ticket_info.py 启动时open_cdn_file(filter_cdn_list)加载可用 CDN并random.randint(0, 4)随机挑一个作为初始节点。README 也强调启动前请先筛选 cdn这点很重要对应命令python3 run.py crun.py 中该分支调用filterCdn()。2018.12.26 更新进一步开启 cdn 查询、自动识别查询接口。2. 双订票接口与慢排队治理2018.8.29 – 2018.9.212018.8.29 更新解决慢排队问题增加双订票接口同时新增第三方库wrapcache需要重新安装 requirements.txt。两个订票接口在 config/urlConf.py 中对应checkQueueOrderUrl/otn/confirmPassenger/confirmSingleForQueue与confirmSingleForQueueAsys/otn/confirmPassenger/confirmSingleForQueueAsys——README 称有两个下单接口随便用哪个都 ok2018.9.21 更新修复已知 bug、优化查询攻略、随机查询 1–3 秒防封 IP、增加余票不足优先提交is_more_ticket参数2018.2.28 更新曾提醒收 12306 风控影响代码可能有时候会进入慢排队请自行调整刷新参数。下单接口类型在 TickerConfig.py 中由ORDER_TYPE控制1 模拟网页自动捡漏下单不稳定2 模拟车次后面的购票按钮下单稳如老狗。五、2019 上半年下单模式、Python 3 与新通知渠道1. 预售踩点与 order_model2019.1.92019.1.9 为ticket_config配置文件增加order_model字段下单模式并实现预售踩点查询下单日志称误差在 0.004s。对应 TickerConfig.py# 下单模式 1 为预售整点刷新刷新间隔0.1-0.5S, 然后会校验时间比如12点的预售那脚本就会在12.00整检票刷新订单 # 2 是捡漏捡漏的刷新间隔时间为0.5-3秒时间间隔长不容易封ip ORDER_MODEL 1 OPEN_TIME 12:59:57 # 预售放票时间如果是捡漏模式可以忽略此操作OPEN_TIME默认设为放票前一分钟内的踩点时刻配合整点校验实现准点下单捡漏模式则放宽刷新间隔降低封 IP 风险。2. Python 3 语法支持与对时调整2019.1.122019.1.12 增加对 python3 语法的支持并删除校验时间功能——因为win10 会阻拦对时功能导致大面积报错同时建议如果是预售为了不耽误宝贵的时间请手动对时。这说明对时模块config/AutoSynchroTime.py在不同系统上存在兼容性差异Windows 用户需要手动校准系统时间。3. server 酱推送与 GUI 界面2019.1.152019.1.15 更新包含三项删除敏感信息打印如账号密码、Cookie 类信息不再输出到日志后续 2019.9.7 再次强化增加server 酱推送购票成功通知对应 config/serverchanConf.py 的sendServerChan通过https://sc.ftqq.com/{secret}.send推送微信通知开关与密钥在 TickerConfig.py 的SERVER_CHAN_CONFis_server_chan、secret中配置增加 GUI 界面gui仓库 uml/程序主界面.png 即主界面示意图。通知触发点统一在 inter/QueryOrderWaitTime.py检测到data.orderId下单成功时同时调用sendEmail与sendServerChan文案为恭喜您订票成功订单号为xxx请立即打开浏览器登录 12306访问‘未完成订单’在 30 分钟内完成支付!。4. 登录接口持续适配2019.412306 登录接口频繁调整日志记录了两轮应急修复2019.4.1增加登录接口解决无法登录问题2019.4.23修复登录 302 问题并给出应急方案——如果下次没来得及更新请自行抓包修改 urlConf 中 getDevicesId 接口即可登录。getDevicesId接口/otn/HttpZF/logdevice定义于 config/urlConf.py用于获取设备指纹。相关配置在 TickerConfig.py 的COOKIE_TYPE# 1使用selenium获取devicesID # 2使用网页端/otn/HttpZF/logdevice获取devicesId这个接口的算法目前可能有点问题如果登录一直302的请改为配置1 # 3自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION这个就不用配置selenium COOKIE_TYPE 3若COOKIE_TYPE 3需手工填写RAIL_EXPIRATION、RAIL_DEVICEID两个 Cookie 值若为 1 则需配置 ChromeDriver 路径。2019.4.23 同日还更新了本地验证码识别verify/ 目录。六、候补订单最后一次重大功能迭代2019.8 – 2019.92019.8.31 起项目进入功能收敛期除移除若快打码、修复下单问题、放弃 Python 2.7 外最大的动作是引入候补订单智能候补。围绕TICKET_TYPE字段日志记录了三次语义修正2019.9.1去除 yaml 配置文件、改为 py 文件配置即如今的 TickerConfig.py新增TICKET_TYPE字段1 刷票2 候补当时候补仅支持单车次、多乘车人2019.9.2剔除TICKET_TYPE认为字段冗余改为全天自动候补 捡漏优先级为下单再候补2019.9.3恢复TICKET_TYPE1 刷票2 候补 刷票并限制候补订单只能在规定车次内候补。最终形态即 TickerConfig.py 顶部注释所描述的# 刷票模式1刷票 2候补刷票 TICKET_TYPE 1 # 关于候补了之后是否还能继续捡漏的问题在此说明软件为全自动候补加捡漏如果软件候补成功则会停止抢票发出邮件通知 # 但是不会影响你继续捡漏如果这个时候捡漏捡到的话也是可以付款成功的也就是说捡漏候补可以最大程度提升抢票成功率候补订单的完整接口链集中在 config/urlConf.py 的候补订单接口区chechFace人脸识别、getSuccessRate成功率、SubmitOrderRequestRsp提交候补准备、confirmHB设置候补订单信息、queryQueue候补排队、passengerInitApi对应 inter/ 目录下的ChechFace.py、ConfirmHB.py、GetSuccessRate.py、PassengerInitApi.py等模块。候补成功文案在 config/TicketEnmu.py候补订单已完成请立即打开浏览器登录 12306访问‘候补订单’在 30 分钟内完成支付!。2019.9.15 更新增长随机停留时长、增长用户心跳时间减少对服务器压力、优化下单逻辑2019.9.18日志最后一条修改下单问题、优化车次打印。日志本身终止于 2019.9.18而 init/select_ticket_info.py 中启动横幅也标注最后更新于 2019.09.18两者相互印证。七、配置项演化对照从更新日志映射到当前 TickerConfig.py将日志中出现过的所有配置概念与当前 TickerConfig.py 逐一对照是理解本项目配置体系最有效的方式更新日志中的字段当前配置项含义与取值station_dateSTATION_DATES出发日期列表格式2018-01-06可多日期from_station / to_stationFROM_STATION/TO_STATION出发/到达城市填写城市名即可无需精确站名set_typeSET_TYPE坐席列表商务座、一等座、二等座、特等座、软卧、硬卧、硬座、无座、动卧is_more_ticketIS_MORE_TICKET余票不足时删减乘车人按余票数优先提交boolselect_refresh_interval已删除2018.1.25现改为MIN_TIME/MAX_TIME随机 1–3 秒ticke_peoplesTICKET_PEOPLES乘车人列表damatu / auto_code_typeAUTO_CODE_TYPE2本地打码tensorflowkeras3云打码is_auto_codeIS_AUTO_CODETrue 全部自动打码False 全部手动打码is_email / email / notice_email_list / username / password / hostEMAIL_CONF邮件通知字典QQ 邮箱需授权码server 酱SERVER_CHAN_CONFis_server_chan开关 secret密钥is_cdnIS_CDN1开启 CDN2普通查询双订票接口ORDER_TYPE1模拟网页捡漏下单2模拟购票按钮下单order_modelORDER_MODELOPEN_TIME1预售踩点整点校验2捡漏0.5–3s 刷新TICKET_TYPETICKET_TYPE1刷票2候补刷票小黑屋TICKET_BLACK_LIST_TIME僵尸票车次关小黑屋时长默认 5 分钟代理 IPIS_PROXY0关闭1开启代理写入 agency/proxy_listdevicesIDCOOKIE_TYPE/RAIL_DEVICEID/RAIL_EXPIRATION1selenium2网页接口3手工抓取 Cookie随机 UARANDOM_AGENT1一直随机2仅启动时随机一次配置修改后推荐按 run.py 定义的三个操作启动程序python3 run.py t测试邮箱与 server 酱是否可用server 酱需先开启开关、python3 run.py c过滤 CDN、python3 run.py r正式运行抢票Docker 用户则可用 docker-compose.yml 一键部署需将AUTO_CODE_TYPE改为 3、HOST改为captcha:80以对接本地打码容器。八、更新日志中的运维经验与风险提示贯穿两年半日志的几条反复强调的实战经验对使用者同样适用封 IP 是常态刷新要克制日志多次出现会封 IP的警告捡漏建议 2 秒刷新、随机 1–3 秒查询、保护请求频率 5 分钟不大于 80 次。12306 对服务器 IP阿里云、腾讯云尤其敏感README 建议优先在家用网络运行慢排队是风控结果2018.2.28 明确受 12306 风控影响代码可能进入慢排队需自行调整刷新参数ORDER_MODEL 2捡漏的长间隔设计即为此而生时间同步影响预售2019.1.12 删除对时功能后预售场景需手动保证系统时间准确否则踩点下单OPEN_TIME失去意义接口会随 12306 改版失效登录 302、无法登录等问题在 2019 年多次出现日志给出的通用解法是抓包修改 urlConf 中的对应接口——config/urlConf.py 将所有 12306 接口集中管理本身就是为快速适配改版设计的。从 2017 年修复登录字段校验的小脚本到 2019 年支持 CDN 轮询、双订票接口、智能候补与多通道通知的完整刷票系统Update.md 这份更新日志既是项目的演进档案也是一份浓缩的12306 风控对抗实战手册。理解每个版本更新的动机与配置含义是正确使用 TickerConfig.py、最大化抢票成功率的前提。赞分享RPA【免费下载链接】1230612306智能刷票订票项目地址https://gitcode.com/gh_mirrors/12/12306点击查看免费下载相关推荐Lombok 更新日志全解读从 v0.8 到 v1.18.49 的功能演进、配置键体系与破坏性变更指南Lombok 更新日志全解读从 v0.8 到 v1.18.49 的功能演进、配置键体系与破坏性变更指南 本文以 Project Lombok 官方更新日志 d开发工具代码生成NERDTree 变更日志全解读从 3.0 到 7.1 的功能演进、关键特性与升级速查NERDTree 变更日志全解读从 3.0 到 7.1 的功能演进、关键特性与升级速查 本篇技术指南以 NERDTree 官方 CHANGELOG.md ht开发工具代码编辑器从 v2.3 到 v8.2PeerTube 变更日志全解读——安全修复、升级路径与关键功能演进从 v2.3 到 v8.2PeerTube 变更日志全解读——安全修复、升级路径与关键功能演进 PeerTube 的 CHANGELOG.md https:/音视频视频后端前端上一篇AirBar 开源项目安装与使用教程下一篇CANN/asc-devkitasc_le_scalar函数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表