關於某東的登錄
- 2019 年 11 月 28 日
- 筆記
關於這個網站的登錄,百度Google一大推。然後呢,我就都試了一番。最後發現只有掃碼登錄最靠譜。
第一種:直接請求
第二種:selenium 模擬登錄 (第二篇文章)
第三種:掃碼登錄 (第三篇文章)
第一種:直接請求

點擊登錄會發送請求,參數看上圖
實際提交的參數, 看下圖,圖中圈出來的基本都是可以找到的,就在請求的 HTML 中。

而 fp 參數和 eid 參數實際是固定的。所以可以直接寫死。看到了一個 pubKey ,我覺得看到這個玩意基本都能猜到這是一個 RSA 加密了,加密的就是 密碼了,

然後還有一個 seqSid 參數 和 一個 authcode 參數
seqSid 參數是個介面返回的響應內容,全局搜索 _jdtdmap_sessionId 就會找到這個介面。
authcode 這個參數就是滑動之後生成的參數,也是最噁心的一個參數。

authcode 參數來源:
請求 URL:

參數:

響應:validate 就是 authcode

這個請求參數中實際只有 d 參數是最重要的,其他的就比較簡單了。
c: 是獲取驗證碼圖片時返回的 challenge 參數。 slide/g.html

bg 和 patch 就分別是背景圖和缺口形狀的圖片
識別這個距離的程式碼,是從網上複製的,忘了是從哪裡來的了。
def test_demo_cv2(self): """ 得到缺口位置 :return: """ block = cv2.imread("bg.jpg", 0) template = cv2.imread("patch.jpg", 0) w, h = template.shape[::-1] # 二值化後的圖片名稱 blockName = "block.jpg" templateName = "template.jpg" # 將二值化後的圖片進行保存 cv2.imwrite(blockName, block) cv2.imwrite(templateName, template) block = cv2.imread(blockName) block = cv2.cvtColor(block, cv2.COLOR_RGB2GRAY) block = abs(255 - block) cv2.imwrite(blockName, block) block = cv2.imread(blockName) template = cv2.imread(templateName) # 獲取偏移量 result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED) # 查找block在template中的位置,返回result是一個矩陣,是每個點的匹配結果 x, y = np.unravel_index(result.argmax(), result.shape) cv2.rectangle(block, (y, x), (y + w, x + h), (7, 249, 151), 2) cv2.imshow('block', block) cv2.waitKey(0) print("x方向的偏移", int(y * 0.4 + 18), 'x:', x, 'y:', y) return y
但是有時候不準確。
w: 驗證碼的寬,固定 280
appID: 固定值
product:固定值
scene: 固定值
e: 固定值
s: 全局搜索 _jdtdmap_sessionId
都是頁面中值。
最後說一下 d , d 的位置:在 slide.js 中,名字中間有版本號,沒寫

g 的值

這也就是軌跡了列表了,對軌跡列表進行加密生成了 d 參數
軌跡列表的特點:
第一組,坐標 x 是固定的
最後一組 x – 第一組的 x = 滑動的距離
y 的值變化很小
生成軌跡的方法很多,但是好像能百度到的都沒有什麼用了。
生成軌跡列表後,傳遞參數到加密的函數中,返回加密的參數 d
加密的函數位置:

複製出來,稍微改一下就可以使用 python 直接執行了,我用的是 execjs.
基本到這裡就結束了。
但是,我生成的軌跡基本沒用,通過不了,百度了好多也沒用。