一臀玄,首先我們要先通過瀏覽器抓包的方式搞清楚登錄的流程瓢阴,url,參數(shù)等
用錯(cuò)誤的賬號(hào)密碼測(cè)試就可以了(因?yàn)橹饕谦@取登錄的信息而不是要結(jié)果健无,所以先用錯(cuò)誤的賬號(hào)密碼測(cè)試就可以了荣恐,這樣可以節(jié)省時(shí)間,同時(shí)賬號(hào)不會(huì)出現(xiàn)異常)
當(dāng)我點(diǎn)擊登錄之后我們抓到了兩條請(qǐng)求數(shù)據(jù)累贤,通過查看叠穆,發(fā)現(xiàn)第二條是獲取驗(yàn)證碼圖片的get請(qǐng)求,而通過第一條的返回值我們發(fā)現(xiàn)這是做驗(yàn)證碼驗(yàn)證的一個(gè)請(qǐng)求臼膏,也就是說這里的登錄和普通的網(wǎng)站登錄不一樣硼被,普通的網(wǎng)站登錄是賬號(hào)密碼及驗(yàn)證碼一起提交,而12306是先做了一個(gè)驗(yàn)證碼的驗(yàn)證渗磅,需要等到驗(yàn)證碼驗(yàn)證通過才會(huì)進(jìn)行賬號(hào)密碼的提交祷嘶,我們可以通過測(cè)試來證明我們的猜想(輸入正確的驗(yàn)證碼試試)
通過測(cè)試可以證明我們的猜想是正確的
那么首先我們得解決驗(yàn)證碼的問題屎媳,首先需要驗(yàn)證碼的類型
驗(yàn)證碼的形式:
1,字符驗(yàn)證碼(輸入圖片中的字符完成驗(yàn)證)
2论巍,問答驗(yàn)證碼(輸入驗(yàn)證碼的正確答案完成驗(yàn)證碼)
3烛谊,坐標(biāo)驗(yàn)證碼(輸入正確的驗(yàn)證碼坐標(biāo)完成驗(yàn)證)
很明顯,12306采用的是坐標(biāo)驗(yàn)證碼嘉汰,而且是多組坐標(biāo)丹禀,因?yàn)橛?個(gè)可選項(xiàng)
那么我們來分析下坐標(biāo)的值,因?yàn)檫@里面有很多的因素是需要確定的鞋怀,比如說取值的基坐標(biāo)双泪,坐標(biāo)是否進(jìn)行二次計(jì)算等等
好,分析從哪里開始呢密似?(提問焙矛,看看同學(xué)們有沒有有自己的想法的)
先自己動(dòng)手在瀏覽器操作并抓包,查看請(qǐng)求的參數(shù)中驗(yàn)證碼的坐標(biāo)值于我們選擇的坐標(biāo)的差異與關(guān)系残腌,注意用一個(gè)比較容易計(jì)算的坐標(biāo)值
請(qǐng)求的驗(yàn)證碼參數(shù)如下
坐標(biāo)值為40,46村斟,那么也就是說我們點(diǎn)擊的那個(gè)點(diǎn)的坐標(biāo)就是40,46抛猫,所以我們先用截圖工具畫出一個(gè)長(zhǎng)為40蟆盹,寬為46像素大小的矩形,然后對(duì)照我們點(diǎn)擊的大概位置來看看能否看出什么問題
差不多就得到了下圖矩形的位置闺金,那么剛好貼近驗(yàn)證碼整個(gè)圖片的左側(cè)和上面的橫線處
那么我們先暫時(shí)確定下基坐標(biāo)位置為分割線的最左側(cè)吧
那么我們?cè)趺磥眚?yàn)證我們的猜想呢逾滥?(提問)
那就是用Python下載驗(yàn)證碼,然后通過這個(gè)驗(yàn)證請(qǐng)求手動(dòng)輸入驗(yàn)證碼的坐標(biāo)進(jìn)行測(cè)試败匹,結(jié)果如下
驗(yàn)證碼通過寨昙,那么接下來我們嘗試下用手動(dòng)輸入驗(yàn)證碼的方式來進(jìn)行登錄看是否可行
登錄成功,是不是很激動(dòng)呢掀亩?