日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 模擬網站登錄——滑塊驗證碼的識別

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

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

python 模擬網站登錄——滑塊驗證碼的識別

import timefrom selenium import webdriverfrom selenium.webdriver import ActionChains# 新建selenium瀏覽器對象,后面是geckodriver.exe下載后本地路徑browser = webdriver.Firefox()# 網站登陸頁面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 模擬網站登錄——滑塊驗證碼的識別

拼圖滑動驗證

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

python 模擬網站登錄——滑塊驗證碼的識別

邊緣檢測

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

python 模擬網站登錄——滑塊驗證碼的識別

我們通過一個程序調整一下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)# 參數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()

測試了若干個圖片發現最小閾值100、最大閾值500輸出結果比較理想。

python 模擬網站登錄——滑塊驗證碼的識別

拼圖匹配

我們用cv2的matchTemplate方法進行模糊匹配,匹配方法用CV_TM_CCOEFF_NORMED歸一化相關系數匹配。

幾種方法算法詳見。

【1】 平方差匹配 method=CV_TM_SQDIFF square dirrerence(error)這類方法利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大.【2】標準平方差匹配 method=CV_TM_SQDIFF_NORMED standard square dirrerence(error)【3】 相關匹配 method=CV_TM_CCORR這類方法采用模板和圖像間的乘法操作,所以較大的數表示匹配程度較高,0標識最壞的匹配效果.【4】 標準相關匹配 method=CV_TM_CCORR_NORMED【5】 相關匹配 method=CV_TM_CCOEFF這類方法將模版對其均值的相對值與圖像對其均值的相關值進行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關性(隨機序列).【6】標準相關匹配 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’) # 調整顯示大小 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) # 匹配后結果畫圈 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’)

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

python 模擬網站登錄——滑塊驗證碼的識別

完整程序

完整流程

1.實例化瀏覽器

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

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

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

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

6.將位置信息轉為頁面上的位移距離

7.拖動滑塊到指定位置

import timeimport cv2import canndy_testfrom selenium import webdriverfrom selenium.webdriver import ActionChains# 新建selenium瀏覽器對象,后面是geckodriver.exe下載后本地路徑browser = webdriver.Firefox()# 網站登陸頁面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 模擬網站登錄——滑塊驗證碼的識別

tips:可能會存在第一次不成功的情況,雖然拖動到了指定位置但是提示網絡有問題、拼圖丟失。可以進行循環迭代直到拼成功為止。通過判斷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 模擬網站登錄——滑塊驗證碼的識別的詳細內容,更多關于python 模擬網站登錄的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产视频一区欧美| 国产一区二区三区四区五区| 日韩精选在线| 国产欧美亚洲精品a| 青草综合视频| 99xxxx成人网| 蜜臀久久99精品久久久久久9| 自拍日韩欧美| 亚洲狼人精品一区二区三区| 日韩视频在线一区二区三区| 婷婷中文字幕一区| 另类亚洲自拍| 欧美一级一区| 日韩伦理在线一区| 五月精品视频| 欧美日韩一区二区三区不卡视频 | 日韩三区免费| 欧美精品一区二区久久| 日韩不卡免费高清视频| 最新国产拍偷乱拍精品| 日韩不卡在线观看日韩不卡视频| 久久免费影院| 国产精品日本欧美一区二区三区| 97久久亚洲| 久久中文字幕二区| 国产福利一区二区精品秒拍| 国产综合欧美| 不卡中文字幕| 久久精品国产99国产精品| 久久亚洲风情| 神马午夜在线视频| 亚洲人亚洲人色久| 日产精品一区二区| 欧美特黄一区| 久久精品一本| 日本不卡一区二区三区| 午夜在线精品| 日韩国产网站| 国产成人精品999在线观看| 蜜臀av在线播放一区二区三区| 久久久久久婷| аⅴ资源天堂资源库在线| 你懂的国产精品| 国产综合欧美| 中文在线中文资源| 久久成人av| 亚洲伊人av| 国产精品大片免费观看| 免费观看不卡av| 国产精品久久久久久久久妇女| 精品免费在线| 国产精品亚洲欧美| 欧美日韩视频免费看| 中文一区在线| 国产91精品对白在线播放| 精品一区二区三区免费看| 99久久精品国产亚洲精品| 精品国产乱码久久久| 国产乱子精品一区二区在线观看| 91精品国产福利在线观看麻豆| 国产aⅴ精品一区二区四区| 欧美一区二区三区久久精品| 精精国产xxxx视频在线播放| 婷婷亚洲综合| 天堂成人免费av电影一区| 最新国产精品久久久| 日韩成人亚洲| 久久99精品久久久久久园产越南| 欧美日一区二区三区在线观看国产免 | 亚洲一区二区三区高清不卡| 久久国产电影| 久久亚洲精品伦理| 日本一区免费网站| 国产精品欧美三级在线观看| 国产毛片久久久| 久久久久中文| 日韩在线短视频| 欧美日韩精品一本二本三本| 蜜桃视频一区二区三区| 日本中文字幕一区二区| 欧美成人aaa| 午夜av成人| 亚洲精品少妇| 美日韩一区二区三区| 国产精品亚洲一区二区三区在线观看| 久久国产精品成人免费观看的软件| 国产一在线精品一区在线观看| 99riav国产精品| 国产精品二区影院| 日韩中文首页| 影院欧美亚洲| 国产欧美一区二区色老头| 久久av免费| 好吊视频一区二区三区四区| 亚洲va久久| 欧美日韩网址| 亚洲女同一区| 国产一区一一区高清不卡| 99久久夜色精品国产亚洲狼 | 欧美激情另类| 一级欧洲+日本+国产| 久久av免费| 日韩影院精彩在线| 欧美激情一区| 日本久久二区| 国产一区91| 国产精品久久久久av电视剧| 国产伦乱精品| 老鸭窝亚洲一区二区三区| 蜜桃精品在线| 国产精品伦理久久久久久| 91精品丝袜国产高跟在线| 日韩中文影院| 精品国产麻豆| 日韩av成人高清| 亚洲在线一区| 亚洲成人不卡| 久久美女性网| 国产精久久久| 国产精品sm| 日本不卡视频在线| 午夜亚洲精品| 亚洲免费中文| 日韩精品一二三| 欧美综合二区| 在线精品国产亚洲| 蜜桃久久久久久| 亚洲一区二区三区高清| 欧美专区一区二区三区| 午夜精品网站| 国产精品视区| 美日韩精品视频| 一区二区电影在线观看| 欧美日韩激情| 最新日韩欧美| 亚洲日本三级| 欧美精品影院| 国产99在线| 午夜精品久久久久久久久久蜜桃| 嫩呦国产一区二区三区av| 精品无人区麻豆乱码久久久| 国产精久久久| se01亚洲视频 | 麻豆国产一区| 激情自拍一区| 天堂√中文最新版在线| 久久精品五月| 久久要要av| 国产色99精品9i| 精品亚洲成人| 国产农村妇女精品一二区| 亚洲欧美日韩国产一区二区| 日韩国产欧美一区二区三区| 日本一区福利在线| 国产91欧美| 免费观看不卡av| 国产乱人伦丫前精品视频| 国产精品久久久久久久免费观看| 国产精品永久| 国内激情久久| 色婷婷成人网| 精品国产精品国产偷麻豆| 一区二区三区四区日本视频| 黑人精品一区| 亚洲欧美久久精品| 国产中文字幕一区二区三区| 色婷婷精品视频| 亚洲bt欧美bt精品777| 正在播放日韩精品| 国产麻豆一区| 午夜久久av| 亚洲欧美日本日韩| 99精品视频在线观看免费播放| 日韩激情视频网站| 国产综合亚洲精品一区二| 国产精品色在线网站| 美女尤物久久精品| 免费av一区| 亚洲综合在线电影| 国产精品久久久久久久久久白浆 | 国产精品视频一区视频二区| 黄色成人在线网址| 激情视频网站在线播放色 | 日韩国产欧美一区二区| 欧美精品97| 国产麻豆一区二区三区精品视频| 美日韩精品视频| 在线视频日韩| 影音先锋久久| 午夜在线一区二区| 免费不卡中文字幕在线| 99久久婷婷这里只有精品| 麻豆国产精品777777在线| 国产欧美三级| 久久亚洲人体| 欧美国产一级| 欧美不卡在线| 免费国产自久久久久三四区久久| 色黄视频在线观看| 亚洲精品网址|