最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【分享】Python 多缺口滑塊驗(yàn)證demo

2022-12-08 21:43 作者:拉燈的小手  | 我要投稿

本文所有教程及源碼、軟件僅為技術(shù)研究。不涉及計(jì)算機(jī)信息系統(tǒng)功能的刪除、修改、增加、干擾,更不會(huì)影響計(jì)算機(jī)信息系統(tǒng)的正常運(yùn)行。不得將代碼用于非法用途,如侵立刪!

多缺口滑塊驗(yàn)證demo

環(huán)境

  • win10

  • Python3.9

請(qǐng)?zhí)砑訄D片描述

分享一下項(xiàng)目中碰到的一個(gè)多缺口滑塊驗(yàn)證,先觸發(fā)一下滑塊抓包分析一下是用的哪一家滑塊

在這里插入圖片描述

經(jīng)過(guò)分析發(fā)現(xiàn)不是用的頂象或數(shù)美,驗(yàn)證圖片的接口地址是他自己的的一個(gè)接口,應(yīng)該是自己寫的驗(yàn)證,往有經(jīng)驗(yàn)的大佬指點(diǎn)下。 抓到滑塊圖片地址,是經(jīng)過(guò)加密的,通過(guò)canvas繪畫至頁(yè)面,始終沒(méi)有找到真實(shí)的url,用最笨的方法直接在頁(yè)面截圖

在這里插入圖片描述


在這里插入圖片描述

? ?def get_v3(self):
? ? ? ?# 新開(kāi)一個(gè)窗口,通過(guò)執(zhí)行js來(lái)新開(kāi)一個(gè)窗口(有奇效,可以不被檢測(cè)到)
? ? ? ?js = 'window.open("https://www.vivo.com.cn/service/mobilePhoneAuthenticityCheck/query");'
? ? ? ?self.driver.execute_script(js)
? ? ? ?# 切換窗口
? ? ? ?self.driver.switch_to.window(self.driver.window_handles[1])
? ? ? ?IMEI = "862056063123458"
? ? ? ?# 定位輸入框
? ? ? ?phone_IMEI = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="phone_IMEI"]')))
? ? ? ?phone_IMEI.send_keys(IMEI)
? ? ? ?# 勾選復(fù)選框
? ? ? ?self.wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/main/div[2]/div/p/span'))).click()
? ? ? ?# 點(diǎn)擊立即查詢
? ? ? ?self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="query_IMEI"]'))).click()
? ? ? ?# 定位滑塊圖片
? ? ? ?# 必須先遍歷一遍頁(yè)面所有元素,否則找不到新彈出的滑塊元素
? ? ? ?self.web_driver_wait_ruishu(10, "class", 'dx_captcha dx_captcha_loading-style-popup dx_captcha_basic dx_captcha-type-basic dx_captcha_basic-style-popup')
? ? ? ?print("定位到滑塊彈窗")
? ? ? ?dx_captcha = self.wait.until(EC.presence_of_all_elements_located((By.XPATH, '/html/body/div/div/div[2]/div[2]/div[1]/div[2]/div[2]')))
? ? ? ?print(len(dx_captcha))
? ? ? ?if len(dx_captcha) > 1:
? ? ? ? ? ?dx_captcha = dx_captcha[-1]
? ? ? ?else:
? ? ? ? ? ?dx_captcha = dx_captcha[0]
? ? ? ?# 截圖
? ? ? ?dx_captcha.screenshot(self.bgImg_path)

在這里插入圖片描述

剩下的就是識(shí)別缺口距離了,并生成移動(dòng)軌跡

@staticmethod
? ?def clear_white(img):
? ? ? ?"""清除圖片的空白區(qū)域,這里主要清除滑塊的空白"""
? ? ? ?img = CV2.imread(img)
? ? ? ?rows, cols, channel = img.shape
? ? ? ?min_x = 255
? ? ? ?min_y = 255
? ? ? ?max_x = 0
? ? ? ?max_y = 0
? ? ? ?for x in range(1, rows):
? ? ? ? ? ?for y in range(1, cols):
? ? ? ? ? ? ? ?t = set(img[x, y])
? ? ? ? ? ? ? ?if len(t) >= 2:
? ? ? ? ? ? ? ? ? ?if x <= min_x:
? ? ? ? ? ? ? ? ? ? ? ?min_x = x
? ? ? ? ? ? ? ? ? ?elif x >= max_x:
? ? ? ? ? ? ? ? ? ? ? ?max_x = x

? ? ? ? ? ? ? ? ? ?if y <= min_y:
? ? ? ? ? ? ? ? ? ? ? ?min_y = y
? ? ? ? ? ? ? ? ? ?elif y >= max_y:
? ? ? ? ? ? ? ? ? ? ? ?max_y = y
? ? ? ?img1 = img[min_x:max_x, min_y: max_y]
? ? ? ?return img1

? ?@staticmethod
? ?def template_match(tpl, target):
? ? ? ?th, tw = tpl.shape[:2]
? ? ? ?result = CV2.matchTemplate(target, tpl, CV2.TM_CCOEFF_NORMED)
? ? ? ?min_val, max_val, min_loc, max_loc = CV2.minMaxLoc(result)
? ? ? ?tl = max_loc
? ? ? ?br = (tl[0] + tw, tl[1] + th)
? ? ? ?CV2.rectangle(target, tl, br, (0, 0, 255), 2)
? ? ? ?return tl[0], tl[1]

? ?def calculate_distance(self, pic1_path, pic2_path):
? ? ? ?"""
? ? ? ?計(jì)算滑塊到缺口的距離
? ? ? ?"""
? ? ? ?img1 = self.clear_white(pic1_path)
? ? ? ?img1 = CV2.cvtColor(img1, CV2.COLOR_RGB2GRAY)
? ? ? ?slide = CV2.Canny(img1, 100, 200)

? ? ? ?img2 = CV2.imread(pic2_path, 0)
? ? ? ?back = CV2.Canny(img2, 100, 200)

? ? ? ?slide_pic = CV2.cvtColor(slide, CV2.COLOR_GRAY2RGB)
? ? ? ?back_pic = CV2.cvtColor(back, CV2.COLOR_GRAY2RGB)
? ? ? ?# 滑塊在圖片上的位置
? ? ? ?x, y = self.template_match(slide_pic, back_pic)
? ? ? ?# 滑塊到缺口的距離
? ? ? ?dis_x = int((x + 5) * (340 / 552))
? ? ? ?dis_y = int(y * (340 / 552))
? ? ? ?return dis_x, dis_y

? ?def get_tracks(self, distance, _y):
? ? ? ?"""
? ? ? ?獲取軌跡參數(shù)
? ? ? ?"""
? ? ? ?tracks = list()
? ? ? ?y, v, t, current = 0, 0, 1, 0

? ? ? ?mid = distance * 3 / 4

? ? ? ?exceed = random.randint(40, 90)
? ? ? ?z = random.randint(30, 150)

? ? ? ?while current < (distance + exceed):
? ? ? ? ? ?if current < mid / 2:
? ? ? ? ? ? ? ?a = 2
? ? ? ? ? ?elif current < mid:
? ? ? ? ? ? ? ?a = 3
? ? ? ? ? ?else:
? ? ? ? ? ? ? ?a = -3
? ? ? ? ? ?a /= 2
? ? ? ? ? ?v0 = v
? ? ? ? ? ?s = v0 * t + 0.5 * a * (t * t)
? ? ? ? ? ?current += int(s)
? ? ? ? ? ?v = v0 + a * t

? ? ? ? ? ?y += random.randint(-3, 3)
? ? ? ? ? ?z = z + random.randint(5, 10)
? ? ? ? ? ?tracks.append([min(current, (distance + exceed)), y, z])

? ? ? ?while exceed > 0:
? ? ? ? ? ?exceed -= random.randint(0, 5)
? ? ? ? ? ?y += random.randint(-3, 3)
? ? ? ? ? ?z = z + random.randint(5, 9)
? ? ? ? ? ?tracks.append([min(current, (distance + exceed)), y, z])
? ? ? ?tr = []
? ? ? ?for i, x in enumerate(tracks):
? ? ? ? ? ?tr.append({
? ? ? ? ? ? ? ?'x': x[0],
? ? ? ? ? ? ? ?'y': _y,
? ? ? ? ? ? ? ?'relative_time': x[2]
? ? ? ? ? ?})
? ? ? ?return tr

效果

請(qǐng)?zhí)砑訄D片描述

本文僅供學(xué)習(xí)交流使用,如侵立刪!


【分享】Python 多缺口滑塊驗(yàn)證demo的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南溪县| 天津市| 大方县| 新兴县| 靖江市| 封丘县| 法库县| 佛教| 开阳县| 花莲县| 浦城县| 天长市| 达日县| 探索| 隆安县| 塔城市| 库伦旗| 枣庄市| 麟游县| 且末县| 朝阳市| 鄂尔多斯市| 郯城县| 田林县| 富民县| 大名县| 成安县| 略阳县| 陇西县| 翁牛特旗| 政和县| 临武县| 鹿邑县| 丰宁| 永清县| 东平县| 桂阳县| 本溪市| 德保县| 图木舒克市| 新平|