国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

瀏覽:2日期:2022-08-06 14:58:56
目錄前言開發(fā)工具環(huán)境搭建實(shí)戰(zhàn)記錄一.驗(yàn)證碼簡(jiǎn)介二.破解滑塊驗(yàn)證碼2.1計(jì)算滑塊到缺口的距離2.2將滑塊拖到缺口位置前言

記錄一次利用Python+Selenium破解滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程。讓我們愉快地開始吧~

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

開發(fā)工具

Python版本: 3.6.4

相關(guān)模塊:

pillow模塊;

selenium模塊;

numpy模塊;

以及一些Python自帶的模塊。

其他:

chromedriver

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

實(shí)戰(zhàn)記錄

本文將記錄一次春秋航空的會(huì)員注冊(cè)頁(yè)面所使用的滑塊驗(yàn)證碼破譯過(guò)程,地址為:

https://account.ch.com/NonRegistrations-Regist

一. 驗(yàn)證碼簡(jiǎn)介

驗(yàn)證碼,即CAPTCHA,全自動(dòng)區(qū)分計(jì)算機(jī)和人類的公開圖靈測(cè)試,換而言之,驗(yàn)證碼是一種用于區(qū)分人類與計(jì)算機(jī)的測(cè)試,只有通過(guò)了CAPTCHA,當(dāng)前用戶才被認(rèn)為是人類。

二.破解滑塊驗(yàn)證碼

滑塊驗(yàn)證碼,即用戶使用鼠標(biāo)將滑塊從某個(gè)位置拖動(dòng)到另一個(gè)位置,服務(wù)器通過(guò)用戶拖動(dòng)滑塊的軌跡來(lái)判斷當(dāng)前用戶是否為人類。本文將嘗試破解的是一種拼圖式的滑塊驗(yàn)證碼:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

首先,我手動(dòng)完成了一次滑塊驗(yàn)證碼的驗(yàn)證,想看看需要向服務(wù)器端發(fā)送什么請(qǐng)求才算是通過(guò)了驗(yàn)證,隨便點(diǎn)開了一個(gè),發(fā)現(xiàn)請(qǐng)求需要的參數(shù)是這樣的:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

搞清楚每個(gè)參數(shù)當(dāng)然是可以的,簡(jiǎn)單想了一下,感覺應(yīng)該是這樣的:

首先,利用圖像處理技術(shù)計(jì)算滑塊到缺口的距離。然后,利用機(jī)器以與人類行為相似的方式將滑塊拖到缺口位置,完成驗(yàn)證。

2.1 計(jì)算滑塊到缺口的距離

首先,我們利用Selenium進(jìn)入滑塊驗(yàn)證碼界面:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

也就是這個(gè)界面:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

那么滑塊到缺口的距離該如何計(jì)算呢?

之前看到很多人是這么算的:

出現(xiàn)滑塊驗(yàn)證碼界面時(shí)對(duì)屏幕進(jìn)行截圖(此時(shí)背景圖是完整的),然后模擬點(diǎn)擊滑動(dòng)圓球,使滑塊和缺口出現(xiàn)(此時(shí)背景圖是有缺口的),此時(shí)再次截圖,通過(guò)對(duì)比兩次截圖即可輕松地找到缺口位置。

但是,此方案的前提是在點(diǎn)擊滑動(dòng)圓球之后才出現(xiàn)滑塊和缺口,點(diǎn)擊之前是完整的背景圖。這個(gè)方案在不久前還是可行的,但是魔高一尺道高一丈,數(shù)天前滑塊驗(yàn)證碼版本升級(jí)了?。?!滑塊驗(yàn)證碼直接顯示滑塊和缺口了?。?!也就是不給你看原圖了。

既然準(zhǔn)備用機(jī)器學(xué)習(xí),算法先不考慮,總得先有訓(xùn)練數(shù)據(jù)吧,于是我手動(dòng)刷新了幾次,想研究一下驗(yàn)證碼圖片該如何獲取,實(shí)在不行就手動(dòng)保存?zhèn)€幾百?gòu)???梢凰⑿?,發(fā)現(xiàn)了一件了不起的事情,這網(wǎng)站滑塊驗(yàn)證碼的背景圖只有四張!

根本不需要爬驗(yàn)證碼,手工標(biāo)注,然后訓(xùn)練了?;蛟S有人會(huì)問(wèn),為什么呢?

因?yàn)榫退膹埍尘皥D?。。?!你完全可以這樣:對(duì)當(dāng)前的滑塊驗(yàn)證碼界面進(jìn)行截圖,與對(duì)應(yīng)的完整背景圖進(jìn)行對(duì)比,找到缺口位置,即可計(jì)算出滑塊到缺口的距離了(滑塊初始位置的橫坐標(biāo)是固定的)。

上述方案有如下兩個(gè)問(wèn)題:

(1)如何獲取完整的背景圖?

答案:當(dāng)你完成滑塊驗(yàn)證碼的驗(yàn)證時(shí),還是會(huì)出現(xiàn)對(duì)應(yīng)的完整背景圖的,通過(guò)截屏軟件截下圖就好了。

結(jié)果如下:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

(2)怎么找到當(dāng)前滑塊驗(yàn)證碼對(duì)應(yīng)的完整背景圖?

答案:因?yàn)橹挥兴膹垐D,沒必要用一些高大上的圖像匹配算法,看了下四張圖左上角頂點(diǎn)處的像素值,其中R值分別為:255,217,227,100,顯然,通過(guò)對(duì)比背景圖左上角頂點(diǎn)處的像素值即可找到當(dāng)前滑塊驗(yàn)證碼對(duì)應(yīng)的完整背景圖了,代碼實(shí)現(xiàn)如下:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

注意,因?yàn)榻貓D是這樣子的:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

所以驗(yàn)證碼背景圖左上角頂點(diǎn)處的坐標(biāo)會(huì)隨著電腦和截屏方式的改變而改變(具體而言,Selenium和我電腦上的截屏軟件截出來(lái)的圖,驗(yàn)證碼背景圖的位置坐標(biāo)是不一樣的,需要通過(guò)畫圖軟件確定具體位置)。

所以如果你無(wú)法用我的代碼完成滑塊驗(yàn)證碼破解的話,請(qǐng)自行修改(787, 282)和(787, 293)為適合你自己電腦實(shí)際情況的坐標(biāo)值。

接下來(lái),我們就可以計(jì)算滑塊到缺口的距離了!

先截取當(dāng)前滑塊驗(yàn)證碼界面,代碼實(shí)現(xiàn)如下:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

這里我們把滑塊先移動(dòng)到最右端再截圖,否則滑塊將影響當(dāng)前驗(yàn)證碼界面與對(duì)應(yīng)的完整背景圖之間的像素對(duì)比(即第一次找到的像素差異較大點(diǎn)在滑塊上而不是在期望的缺口上)。

然后通過(guò)與對(duì)應(yīng)的完整背景圖進(jìn)行像素值對(duì)比,找到缺口位置,即可計(jì)算出滑塊到缺口的距離了(因?yàn)榛瑝K初始位置的橫坐標(biāo)是固定的):

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

2.2 將滑塊拖到缺口位置

接下來(lái),我們需要利用機(jī)器以與人類行為相似的方式將滑塊拖到缺口位置,完成驗(yàn)證。

一般而言,人手工拖動(dòng)滑塊的軌跡是這樣的:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

即:先快速向右拖動(dòng),快到缺口時(shí),再減速慢調(diào)。那么這樣的軌跡該如何生成呢?

我想了兩種方案:

方案一是根據(jù)物理學(xué)中的加速度減速度來(lái)模擬拖動(dòng)滑塊的軌跡,代碼實(shí)現(xiàn)如下:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

方案二是直接構(gòu)造一些函數(shù)來(lái)模擬拖動(dòng)滑塊的軌跡,函數(shù)代碼實(shí)現(xiàn)如下:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

最后,使用Selenium按照設(shè)定的軌跡將滑塊移動(dòng)到缺口處即可:

利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程

文章到這里就結(jié)束了,感謝你的觀看,Python24個(gè)小游戲系列,下篇文章分享Python+Selenium破譯B站滑塊驗(yàn)證碼

到此這篇關(guān)于利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程的文章就介紹到這了,更多相關(guān)Python Selenium滑塊驗(yàn)證碼內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 三河市| 东港市| 佳木斯市| 平阴县| 武平县| 宝清县| 耒阳市| 五台县| 潍坊市| 华阴市| 色达县| 长宁县| 交城县| 麻栗坡县| 清苑县| 泸溪县| 仁布县| 乌审旗| 民丰县| 双峰县| 日土县| 武义县| 神农架林区| 富蕴县| 石台县| 海兴县| 曲水县| 崇文区| 晋江市| 且末县| 广东省| 荃湾区| 正镶白旗| 无棣县| 新干县| 临湘市| 遂宁市| 德江县| 开封市| 景东| 金堂县|