ajax
技術對指定接口進行查詢,如果返回值爲有票,那就告知用戶有票了並進入訂票界面。官網用5秒一次的刷新速度,是保證了服務器在全國同時購票的幾萬人每5秒一次訪問的情況下不崩潰而設定的較爲理想的值,但很多搶票軟件都是以更短的時間輪詢以期在最快的時間內獲取是否有票的信息。爲保證儘可能地刷到票,我就把這個時間設定爲0.5秒,並將超時時間設定爲0.45秒,在查詢到有票的時候播放汽笛聲、彈窗提示並自動提交訂票表單,這樣基本滿足搶票要求了。到了訂票界面就需要自己手快一點、驗證碼輸快一點了,沒辦法還不會做驗證碼識別——實戰的時候,從有票到提交訂票請求,再到輸入驗證碼確認訂票用了不到2秒的時間。利用自己學習到的技術完成了一項不靠別人靠自己的事情,想想還有點小激動呢,嘿嘿~
研究過程:
用chrome
瀏覽器自帶的開發者工具(F12
打開)查看查詢時調用過程,定位查詢代碼,分析主要代碼並解析出來,自己改造後直接在開發者工具的console
裏運行即可。
分析query發起過程
改造代碼後直接在控制檯運行
最終代碼:
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
|
flag = 0; function
X(){ if ( flag==1 )
return ; // 請求參數 var
bR = { "leftTicketDTO.train_date" :
"這裏填乘車日期" , "leftTicketDTO.from_station" : $( "#fromStation" ).val(), "leftTicketDTO.to_station" : $( "#toStation" ).val(), purpose_codes:
"ADULT" }; jQuery.ajax({ type:
"get" , isTakeParam:
false , beforeSend:
function (bT) { bT.setRequestHeader( "If-Modified-Since" ,
"0" ); bT.setRequestHeader( "Cache-Control" ,
"no-cache" ) }, data: bT, timeout: 450, success:
function (bV) { if
(bV.status) { var
d = bV.data[3]; if ( d.secretStr!= ''
){ // 播放聲音 jQuery( '#tryPlayer' ).click(); flag = 1; // 彈窗 alert( 'got it!' ); // 提交訂單 submitOrderRequest(d.secretStr); } } } }); } setInterval( function (){X(bR);}, 500); |