前言:
可能大家對於豆瓣並不怎麼了解,我給大家簡單介紹一下。
豆瓣是一個社區網站,該網站以書影音起家,提供關於書籍、電影、音樂等作品的信息,無論描述還是評論都由用戶提供(User-generated content,UGC),是Web 2.0網站中具有特色的一個網站。網站還提供書影音推薦、線下同城活動、小組話題交流等多種服務功能,它更像一個集品味系統(讀書、電影、音樂)、表達系統(我讀、我看、我聽)和交流系統(同城、小組、友鄰)於一體的創新網絡服務,一直致力於幫助都市人群發現生活中有用的事物。
2012年8月,豆瓣宣佈其月度覆蓋獨立用戶數(Unique Visitors)已超過1億,日均PV為1.6億。 [1] 2013年第二、三季度的豆瓣月度覆蓋獨立用戶數均達2億,較去年同期增長一倍。 [2]
更為重要的一件事情是它是純Python編程語言開發的!!!
所以咱們利用Python去搞定它的驗證碼實現模擬登陸,是有一定意義的喲!
實戰:
- Python 3.6.5 解釋器
- pycharm 編輯器
- selenium 模塊
其實利用selenium模擬登陸沒什麼難度的,關鍵在於這個豆瓣的驗證碼要怎麼辦。
經過我多次截圖發現了一些規律,如下所示:
驗證碼方塊離左邊的距離永遠相等,只有Y軸上下有一點變化,但是這個重要嗎?
然後方塊離凹槽的距離偏差只有10PX左右,那麼你懂了嗎?
我們只需要往右邊每次移動相同的距離就可以了。然而前面所說的10px其實大家應該都懂,那個是可以忽略不計的,正常人去滑動驗證碼,他偶爾也有一點點偏差,沒有完全重合也會提示成功!(閾值)
當然我最後去試了下,並不能夠成功。確實滑到了位置上,但是它提示網絡波動!
這可為難不了我,我一下就想到這個是檢測到我了,因為 機器滑動是急速的,和正常人滑動是有區別的,正常人滑動應該是先加速,再減速!你可以稱這個技術為軌跡。
以下為Python勻加速代碼:
<code>def
get_tracks
(distance)
:''' 拿到移動軌跡,模仿人的滑動行為,先勻加速後勻減速 勻變速運動基本公式: ①v=v0+at ②s=v0t+½at² ③v²-v0²=2as :param distance: 需要移動的距離 :return: 存放每0.3秒移動的距離 '''
v =0
t =0.3
tracks = [] current =0
mid = distance*4
/5
while
current < distance:if
current < mid: a =2
else
: a =-3
v0 = v s = v0*t+0.5
*a*(t**2
) current += s tracks.append(round(s)) v = v0 + a*treturn
tracks/<code>