电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

瀏覽:12日期:2022-06-24 15:09:07
普通滑動驗證

以http://admin.emaotai.cn/login.aspx為例這類驗證碼只需要我們將滑塊拖動指定位置,處理起來比較簡單。拖動之前需要先將滾動條滾動到指定元素位置。

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

import timefrom selenium import webdriverfrom selenium.webdriver import ActionChains# 新建selenium瀏覽器對象,后面是geckodriver.exe下載后本地路徑browser = webdriver.Firefox()# 網(wǎng)站登陸頁面url = ’http://admin.emaotai.cn/login.aspx’# 瀏覽器訪問登錄頁面browser.get(url)browser.maximize_window()browser.implicitly_wait(5)draggable = browser.find_element_by_id(’nc_1_n1z’)# 滾動指定元素位置browser.execute_script('arguments[0].scrollIntoView();', draggable)time.sleep(2)ActionChains(browser).click_and_hold(draggable).perform()# 拖動ActionChains(browser).move_by_offset(xoffset=247, yoffset=0).perform()ActionChains(browser).release().perform()

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

拼圖滑動驗證

我們以歐模網(wǎng)很多網(wǎng)站使用的都是類似的方式。因為驗證碼及拼圖都有明顯明亮的邊界,圖片辨識度比較高。所以我們嘗試先用cv2的邊緣檢測識別出邊界,然后進行模糊匹配,匹配出拼圖在驗證碼圖片的位置。

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

邊緣檢測

cv2模塊提供了多種邊緣檢測算子,包括Sobel、Scharr、Laplacian、prewitt、Canny或Marr—Hildreth等,每種算子得出的結(jié)果不同。這里我們用Canny算子,測試了很多算子,這種效果最好。

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

我們通過一個程序調(diào)整一下canny算子的閾值,使得輸出圖片只包含拼圖輪廓。

import cv2lowThreshold = 0maxThreshold = 100# 最小閾值范圍 0 ~ 500# 最大閾值范圍 100 ~ 1000def canny_low_threshold(intial): blur = cv2.GaussianBlur(img, (3, 3), 0) canny = cv2.Canny(blur, intial, maxThreshold) cv2.imshow(’canny’, canny)def canny_max_threshold(intial): blur = cv2.GaussianBlur(img, (3, 3), 0) canny = cv2.Canny(blur, lowThreshold, intial) cv2.imshow(’canny’, canny)# 參數(shù)0以灰度方式讀取img = cv2.imread(’vcode.png’, 0)cv2.namedWindow(’canny’, cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)cv2.createTrackbar(’Min threshold’, ’canny’, lowThreshold, max_lowThreshold, canny_low_threshold)cv2.createTrackbar(’Max threshold’, ’canny’, maxThreshold, max_maxThreshold, canny_max_threshold)canny_low_threshold(0)# esc鍵退出if cv2.waitKey(0) == 27: cv2.destroyAllWindows()

測試了若干個圖片發(fā)現(xiàn)最小閾值100、最大閾值500輸出結(jié)果比較理想。

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

拼圖匹配

我們用cv2的matchTemplate方法進行模糊匹配,匹配方法用CV_TM_CCOEFF_NORMED歸一化相關(guān)系數(shù)匹配。

幾種方法算法詳見。

【1】 平方差匹配 method=CV_TM_SQDIFF square dirrerence(error)這類方法利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大.【2】標準平方差匹配 method=CV_TM_SQDIFF_NORMED standard square dirrerence(error)【3】 相關(guān)匹配 method=CV_TM_CCORR這類方法采用模板和圖像間的乘法操作,所以較大的數(shù)表示匹配程度較高,0標識最壞的匹配效果.【4】 標準相關(guān)匹配 method=CV_TM_CCORR_NORMED【5】 相關(guān)匹配 method=CV_TM_CCOEFF這類方法將模版對其均值的相對值與圖像對其均值的相關(guān)值進行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關(guān)性(隨機序列).【6】標準相關(guān)匹配 method=CV_TM_CCOEFF_NORMED

canndy_test.py:

import cv2import numpy as npdef matchImg(imgPath1,imgPath2): imgs = [] # 原始圖像,用于展示 sou_img1 = cv2.imread(imgPath1) sou_img2 = cv2.imread(imgPath2) # 原始圖像,灰度 # 最小閾值100,最大閾值500 img1 = cv2.imread(imgPath1, 0) blur1 = cv2.GaussianBlur(img1, (3, 3), 0) canny1 = cv2.Canny(blur1, 100, 500) cv2.imwrite(’temp1.png’, canny1) img2 = cv2.imread(imgPath2, 0) blur2 = cv2.GaussianBlur(img2, (3, 3), 0) canny2 = cv2.Canny(blur2, 100, 500) cv2.imwrite(’temp2.png’, canny2) target = cv2.imread(’temp1.png’) template = cv2.imread(’temp2.png’) # 調(diào)整顯示大小 target_temp = cv2.resize(sou_img1, (350, 200)) target_temp = cv2.copyMakeBorder(target_temp, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255]) template_temp = cv2.resize(sou_img2, (200, 200)) template_temp = cv2.copyMakeBorder(template_temp, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255]) imgs.append(target_temp) imgs.append(template_temp) theight, twidth = template.shape[:2] # 匹配拼圖 result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED) # 歸一化 cv2.normalize( result, result, 0, 1, cv2.NORM_MINMAX, -1 ) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 匹配后結(jié)果畫圈 cv2.rectangle(target,max_loc,(max_loc[0]+twidth,max_loc[1]+theight),(0,0,255),2) target_temp_n = cv2.resize(target, (350, 200)) target_temp_n = cv2.copyMakeBorder(target_temp_n, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255]) imgs.append(target_temp_n) imstack = np.hstack(imgs) cv2.imshow(’stack’+str(max_loc), imstack) cv2.waitKey(0) cv2.destroyAllWindows()matchImg(’vcode_data/out_’+str(1)+’.png’,’vcode_data/in_’+str(1)+’.png’)

我們測試幾組數(shù)據(jù),發(fā)現(xiàn)準確率拿來玩玩尚可。max_loc就是匹配出來的位置信息,我們只需要按照位置進行拖動即可。

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

完整程序

完整流程

1.實例化瀏覽器

2.點擊登陸,彈出滑動驗證框

3.分別新建標簽頁打開背景圖及拼圖

4.全屏截圖后按照尺寸裁剪

5.模糊匹配兩張圖片,獲取匹配結(jié)果位置信息

6.將位置信息轉(zhuǎn)為頁面上的位移距離

7.拖動滑塊到指定位置

import timeimport cv2import canndy_testfrom selenium import webdriverfrom selenium.webdriver import ActionChains# 新建selenium瀏覽器對象,后面是geckodriver.exe下載后本地路徑browser = webdriver.Firefox()# 網(wǎng)站登陸頁面url = ’https://www.om.cn/login’# 瀏覽器訪問登錄頁面browser.get(url)handle = browser.current_window_handle# 等待3s用于加載腳本文件browser.implicitly_wait(3)# 點擊登陸按鈕,彈出滑動驗證碼btn = browser.find_element_by_class_name(’login_btn1’)btn.click()# 獲取iframe元素,切到iframeframe = browser.find_element_by_id(’tcaptcha_iframe’)browser.switch_to.frame(frame)time.sleep(1)# 獲取背景圖srctargetUrl = browser.find_element_by_id(’slideBg’).get_attribute(’src’)# 獲取拼圖srctempUrl = browser.find_element_by_id(’slideBlock’).get_attribute(’src’)# 新建標簽頁browser.execute_script('window.open(’’);')# 切換到新標簽頁browser.switch_to.window(browser.window_handles[1])# 訪問背景圖srcbrowser.get(targetUrl)time.sleep(3)# 截圖browser.save_screenshot(’temp_target.png’)w = 680h = 390img = cv2.imread(’temp_target.png’)size = img.shapetop = int((size[0] - h) / 2)height = int(h + ((size[0] - h) / 2))left = int((size[1] - w) / 2)width = int(w + ((size[1] - w) / 2))cropped = img[top:height, left:width]# 裁剪尺寸cv2.imwrite(’temp_target_crop.png’, cropped)# 新建標簽頁browser.execute_script('window.open(’’);')browser.switch_to.window(browser.window_handles[2])browser.get(tempUrl)time.sleep(3)browser.save_screenshot(’temp_temp.png’)w = 136h = 136img = cv2.imread(’temp_temp.png’)size = img.shapetop = int((size[0] - h) / 2)height = int(h + ((size[0] - h) / 2))left = int((size[1] - w) / 2)width = int(w + ((size[1] - w) / 2))cropped = img[top:height, left:width]cv2.imwrite(’temp_temp_crop.png’, cropped)browser.switch_to.window(handle)# 模糊匹配兩張圖片move = canndy_test.matchImg(’temp_target_crop.png’, ’temp_temp_crop.png’)# 計算出拖動距離distance = int(move / 2 - 27.5) + 2draggable = browser.find_element_by_id(’tcaptcha_drag_thumb’)ActionChains(browser).click_and_hold(draggable).perform()# 拖動ActionChains(browser).move_by_offset(xoffset=distance, yoffset=0).perform()ActionChains(browser).release().perform()time.sleep(10)

python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

tips:可能會存在第一次不成功的情況,雖然拖動到了指定位置但是提示網(wǎng)絡(luò)有問題、拼圖丟失。可以進行循環(huán)迭代直到拼成功為止。通過判斷iframe中id為slideBg的元素是否存在,如果成功了則不存在,失敗了會刷新拼圖讓你重新拖動。

if(isEleExist(browser,’slideBg’)): # retry else: returndef isEleExist(browser,id): try: browser.find_element_by_id(id) return True except: return False

以上就是python 模擬網(wǎng)站登錄——滑塊驗證碼的識別的詳細內(nèi)容,更多關(guān)于python 模擬網(wǎng)站登錄的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 深圳3D打印服务-3D打印加工-手板模型加工厂-悟空打印坊 | 四川成人高考_四川成考报名网 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 深圳市简易检测技术有限公司| 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 搪瓷搅拌器,搪玻璃搅拌器,搪玻璃冷凝器_厂家-淄博越宏化工设备 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 微型气泵-真空-蠕动-水泵-厂家-深圳市品亚科技有限公司 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 无锡网站建设_企业网站定制-网站制作公司-阿凡达网络 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 |