怒刷九元航空靠窗座位!
第一次用九元航空,没有免费托运的行李也就算了,竟然连值机都是要随机(按照你提交选座的顺序来分配),前两次都没刷到靠窗的作为,这让我刚买的单反,怎么在朋友圈装逼呐!不过按照九元的规则,我还有最后一次提交选座的机会,这个一定要把握啊。
入正题,F12看到,九元的值机页面很简单。在这个页面中输入身份证跟姓名后(貌似只能提前24个小时值机嘛?反正昨天没查出我有机票这一项),点击【查询航班】,之后再点击【值机】按钮(如果已经值机的可以取消值机,然后在进行值机--亲,你只有3次机会哦)。
之后你会进入这个页面:
http://www.9air.com/check_seat.html?pid={一串数字}&fno={航班号}&fd=20160303&ori=WNZ&name={姓名}&idno={身份证号}
然后,F12,,,你懂得!
在Network中由下往上看,你会发现这个请求:
http://www.9air.com/aq/GetCheckInSeats?pid={一串数字}&fno={航班号}
里面返回的JSON数据如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | { "fid" : "XXXX" , "stf" : "0" , "stqnull" : [ { "sn" : "1F" }, { "sn" : "1E" }, { "sn" : "1D" } ], "stqs" : [ { "sex" : "F" , "sn" : "5A" }, { "sex" : "M" , "sn" : "5B" }, { "sex" : "M" , "sn" : "5C" }, { "sex" : "M" , "sn" : "5D" }, { "sex" : "M" , "sn" : "5F" }, { "sex" : "M" , "sn" : "6A" }, { "sex" : "M" , "sn" : "8A" } ], "stc" : "0" , "mxy" : "XXXXX" , "at" : "XXXXX" , "destcn" : "到达地" , "fd" : "20160303" , "ori" : "WNZ" , "stq_run_time" : "15" , "dest" : "CAN" , "seqy" : "这个也不重要" , "ac" : "XXXXX" , "aa" : "XXXX" , "fn" : "XXXX" , "sty" : "1" , "oricn" : "出发地" } |
stqs里面是作为已经被预定了的。竟然连性别都有。。。好吧,我很正直,只刷靠窗的位置。
一下是我写的js脚本,把这个复制到上面那个页面的控制台中就行了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | var _loop_count=0; function checkhb(){ //刷航班 _loop_count++; var bo= false ; $.get( "http://www.9air.com/aq/GetCheckInSeats?pid={一串数字}&fno={航班号}" , function (data){ var minh=5,maxh=32; //行 var lei=[ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ]; for (;minh<maxh;minh++){ //排循环 var r=[],r1=0; //已经有人的位置 for ( var i=0,l=lei.length;i<l;i++){ var leeph=minh+lei[i]; //当前循环的位置 for ( var ii=0,ll=data.stqs.length;ii<ll;ii++) if (leeph==data.stqs[ii].sn) r.push(i); } if (r.length==6){ //当前排已经坐满人 continue ; } else if (r.length!=0){ bo=r[0]!=0; //说明第一个座位没人,必须抢啊 if (bo) break ; for ( var a=0,b=r.length;a<b;a++){ r1=r1+r[a]; } bo=(r.length==6&&r1==(0+1+2+3+4)); //剩下右边一个靠窗的位置 if (bo) break ; if (r1!=(0+1+2+3+4+5)){ //不用循环了,暂时没有靠窗的位置 console.log( '循环第' +_loop_count+ '次,暂时不能抢!' ); break ; } } else { //当前排没有一个人 bo= true ; break ; } } if (bo) $( ".submitbut" ).trigger( 'click' ); }); } setInterval(checkhb,3000); |
亲们,祝福我刷出靠窗的座位吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?