京東模擬登入,自動完成滑塊驗證

2021-09-29 01:39:00 字數 3809 閱讀 6531

最近在研究滑塊驗證碼這一塊,自然也玩了一把京東,發現之前的軌跡方程並不可用,需要自己慢慢除錯,找到合適的引數。這種滑塊認證的成功率不可能是100%,所以要寫個迴圈,讓認證失敗的時候重新呼叫。

先看效果:

(1) 滑塊缺口距離識別

京東的驗證碼背景圖和模板圖大概各10張;缺口位置變化的

使用 cv2 庫,用模板匹配,就是用來在大圖中找小圖,也就是說在一副影象中尋找另外一張模板影象的位置

import cv2

img = cv2.imread(

'a1.png',0

)template = cv2.imread(

'a2.png',0

)h, w = template.shape[:2

]print

("h = "

,h )

print

("w = "

, w)

res = cv2.matchtemplate(img, template, cv2.tm_ccorr_normed)

min_val, max_val, min_loc, max_loc = cv2.minmaxloc(res)

print

("min_val = "

, min_val)

print

("max_val = "

, max_val)

print

("min_loc = "

, min_loc)

print

("max_loc = "

, max_loc)

left_top = min_loc # 左上角

right_bottom =

(left_top[0]

+ w, left_top[1]

+ h)

# 右下角

cv2.rectangle(img, left_top, right_bottom,

255,2)

# 畫出矩形位置

cv2. imwrite(

'aa1.png'

, img)

匹配結果:

識別率大概 80% 左右,但好在**簡單,只需4行可解決缺口位置識別;這裡是真實的缺口距離,放到網頁中要縮放 278/360

(2) 處理滑塊驗證的軌跡

這裡用簡單的方式處理滑塊的拖動速度,**量少;

示例:

import asyncio

import random

import cv2

from pyppeteer import launch

from urllib import request

# 滑塊的缺口距離識別

async

defget_distance()

: img = cv2.imread(

'image.png',0

) template = cv2.imread(

'template.png',0

) res = cv2.matchtemplate(img, template, cv2.tm_ccorr_normed)

value = cv2.minmaxloc(res)[2

][0]

distance = value *

278/

360return distance

async

defmain()

: browser =

await launch(

) page =

await browser.newpage(

)await page.setviewport(

)await page.goto(

'')await page.waitfor(

1000

)await page.click(

'div.login-tab-r'

)await page.waitfor(

1000

)# 模擬人工輸入使用者名稱、密碼

await page.

type

('#loginname'

,'[email protected]',)

await page.

type

('#nloginpwd'

,'1234567890',)

await page.waitfor(

2000

)await page.click(

'div.login-btn'

)await page.waitfor(

3000

)# 模擬人工拖動滑塊、失敗則重試

while

true:if

await page.j(

'#ttbar-login'):

print

('登入成功!'

)await page.waitfor(

6000

)break

else

: image_src =

await page.jeval(

'.jdjrv-bigimg >img'

,'el => el.src'

) request.urlretrieve(image_src,

'image.png'

) template_src =

await page.jeval(

'.jdjrv-smallimg >img'

,'el => el.src'

) request.urlretrieve(template_src,

'template.png'

)await page.waitfor(

3000

) el =

await page.j(

'div.jdjrv-slide-btn'

) box =

await el.boundingbox(

)await page.hover(

'div.jdjrv-slide-btn'

) distance =

await get_distance(

)await page.mouse.down(

)await page.mouse.move(box[

'x']

+ distance + random.uniform(30,

33), box[

'y'],)

await page.waitfor(random.randint(

300,

700)

)await page.mouse.move(box[

'x']

+ distance +

29, box[

'y'],)

await page.mouse.up(

)await page.waitfor(

3000

)asyncio.get_event_loop(

).run_until_complete(main(

))

vue滑塊驗證登入

滑塊樣式 請輸入手機號 el input el form item checkmove movebox movego div txt id txt 按住滑塊,拖動到最右邊 div move movebefore v move pull div v move 為自定義指令 div el form it...

京東模擬登入

京東表示很無奈,爬蟲都用它練手 登入時,瀏覽器傳送了乙個post請求,在請求頭上帶了基本引數,並不是所有引數在模擬時都需要,一般需要cookie,referer,和user agent 會話物件requests.session能夠跨請求地保持某些引數,比如cookies,即在同乙個session例項...

系統登入頁面拉動驗證滑塊進行驗證

有如下登入頁面 登入過程中輸入賬號密碼後 需要拉 中 滑塊 後 才可登入成功 如何使用webdriver 實現拉動滑塊的功能?如下 建立公共功能類並加入方法 public class actionutil public static void drag element webelement e,in...