Last active
September 17, 2026 06:02
-
-
Save diyism/100899d38aa187cdd1b5ac8258b54ef2 to your computer and use it in GitHub Desktop.
12306官网预填抢票
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //预先填好购票车次和人, 打开预填页面看看是否填正确了并保持在该页面: https://kyfw.12306.cn/otn/view/prefill_order.html | |
| //先同步电脑时间, 因为太早或晚一秒都会在发第2个请求POST的时候失败, debian系统下: sudo ntpdate -u ntp.aliyun.com 然后用https://time.is 可验证误差 | |
| //然后打开浏览器console, 在firefox里是F12 | |
| //在开抢前5分钟仍要自己刷新及登录12306, 因为即使脚本在跑登录仍会过期, 也可以采用在同一浏览器另一个tab页面自动刷新 | |
| //贴入下方脚本并回车开始运行 | |
| (function() { | |
| console.log('12306 预填强票自动点击脚本已启动...'); | |
| let buyClicked = false; // 防止重复点击购票按钮 | |
| let okClicked = false; // 防止重复点击确认按钮 | |
| // 1. 高频监听「按预填信息购票」按钮 | |
| const buyInterval = setInterval(() => { | |
| // 优先匹配可见的按钮(参考真实页面 style) | |
| let buyBtn = document.querySelector('a.buy-ticket-button[style*="display: inline-block"]') | |
| || document.querySelector('a.buy-ticket-button'); | |
| if (buyBtn && !buyBtn.disabled && window.getComputedStyle(buyBtn).display !== 'none') { | |
| buyBtn.click(); | |
| console.log('✅ 已自动点击「按预填信息购票」按钮'); | |
| buyClicked = true; | |
| //clearInterval(buyInterval); // 点完后停止监听购票按钮 | |
| } | |
| }, 3); // 每3毫秒检查一次 | |
| // 2. 高频监听弹窗确认按钮(btn-primary ok) | |
| const okInterval = setInterval(() => { | |
| let okBtn = document.querySelector('a.btn.btn-primary.ok') | |
| || document.querySelector('a[href="javascript:;"].btn.btn-primary.ok') | |
| || document.querySelector('.btn.btn-primary.ok'); | |
| if (okBtn && !okBtn.disabled) { | |
| okBtn.click(); | |
| console.log('✅ 已自动点击弹窗确认按钮'); | |
| okClicked = true; | |
| clearInterval(okInterval); // 点完后停止 | |
| } | |
| }, 5); // 每5毫秒检查一次 | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment