欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > python 模擬網站登錄——滑塊驗證碼的識別

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

熱門標簽:如何在地圖標注文字 n400電話申請多少錢 地圖標注推廣單頁 長春人工智能電銷機器人官網 廈門crm外呼系統如何 ai地圖標注 女王谷地圖標注 西藏快速地圖標注地點 百應ai電銷機器人鄭州

普通滑動驗證

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

import time
from selenium import webdriver
from 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()

拼圖滑動驗證

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

邊緣檢測

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

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

import cv2

lowThreshold = 0
maxThreshold = 100

# 最小閾值范圍 0 ~ 500
# 最大閾值范圍 100 ~ 1000

def 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輸出結果比較理想。

拼圖匹配

我們用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 cv2
import numpy as np

def 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就是匹配出來的位置信息,我們只需要按照位置進行拖動即可。

完整程序

完整流程

1.實例化瀏覽器

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

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

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

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

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

7.拖動滑塊到指定位置

import time
import cv2
import canndy_test
from selenium import webdriver
from 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元素,切到iframe
frame = browser.find_element_by_id('tcaptcha_iframe')
browser.switch_to.frame(frame)

time.sleep(1)

# 獲取背景圖src
targetUrl = browser.find_element_by_id('slideBg').get_attribute('src')

# 獲取拼圖src
tempUrl = browser.find_element_by_id('slideBlock').get_attribute('src')


# 新建標簽頁
browser.execute_script("window.open('');")
# 切換到新標簽頁
browser.switch_to.window(browser.window_handles[1])

# 訪問背景圖src
browser.get(targetUrl)
time.sleep(3)
# 截圖
browser.save_screenshot('temp_target.png')

w = 680
h = 390

img = cv2.imread('temp_target.png')

size = img.shape

top = 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 = 136
h = 136

img = cv2.imread('temp_temp.png')

size = img.shape

top = 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) + 2

draggable = 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)

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

 if(isEleExist(browser,'slideBg')):
    # retry
  else:
    return

def isEleExist(browser,id):
  try:
    browser.find_element_by_id(id)
    return True
  except:
    return False

以上就是python 模擬網站登錄——滑塊驗證碼的識別的詳細內容,更多關于python 模擬網站登錄的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python網絡爬蟲之模擬登錄 自動獲取cookie值 驗證碼識別的具體實現
  • 教你怎么用python批量登錄帶有驗證碼的網站
  • python解決12306登錄驗證碼的實現
  • 用python登錄帶弱圖片驗證碼的網站
  • 基于Python實現原生的登錄驗證碼詳情

標簽:拉薩 內江 渭南 廊坊 亳州 黔東 綿陽 興安盟

巨人網絡通訊聲明:本文標題《python 模擬網站登錄——滑塊驗證碼的識別》,本文關鍵詞  python,模擬,網站,登錄,滑塊,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 模擬網站登錄——滑塊驗證碼的識別》相關的同類信息!
  • 本頁收集關于python 模擬網站登錄——滑塊驗證碼的識別的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    精品国产免费久久久久久婷婷| 免费看一级黄色| 91国产福利在线| 中文字幕免费在线观看视频一区| 毛片基地黄久久久久久天堂| 国产综合内射日韩久| 欧美三级欧美一级| 一区二区三区在线免费| 91香蕉国产在线观看软件| 色激情天天射综合网| 国产精品成人免费在线| 成人精品免费视频| av激情在线观看| 国产精品福利电影一区二区三区四区| 国产精品自拍三区| 黄色录像二级片| 日本一区二区三区电影| 国产福利91精品一区二区三区| 国产三级在线观看完整版| 久久青草国产手机看片福利盒子| 久久99国产精品久久99| 五月婷婷欧美激情| 国产精品免费av| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产在线精品一区二区不卡了| 国产毛片欧美毛片久久久| 国产视频一区在线观看| 国产成人综合在线| 中文在线字幕在线观看| 亚洲精品大片www| 亚洲少妇中文字幕| 日韩一级欧美一级| 国产一区二区三区香蕉 | 青椒成人免费视频| av黄色在线免费观看| 国产欧美一二三区| 99麻豆久久久国产精品免费| 欧美日韩一区视频| 毛片av一区二区三区| 国产又粗又黄又猛| 亚洲图片激情小说| 绯色av蜜臀vs少妇| 日韩欧美国产系列| 国产高清无密码一区二区三区| 538精品在线观看| 亚洲国产精品久久艾草纯爱| 色婷婷在线影院| 国产精品毛片久久久久久久| 黑人无套内谢中国美女| 欧美不卡视频一区| 丁香另类激情小说| 在线播放91灌醉迷j高跟美女| 久久国产福利国产秒拍| 天天看片中文字幕| 视频一区国产视频| 女同久久另类69精品国产| 一级日本不卡的影视| 国产精品高清无码在线观看| 国产精品久久久久久久浪潮网站 | 午夜久久久久久久久久一区二区| 亚洲做受高潮无遮挡| 国产精品久久久久久久浪潮网站| 精品人妻一区二区三区日产| 国产日韩欧美制服另类| 色婷婷狠狠18禁久久| 久久久久久免费网| 亚洲AV无码久久精品国产一区| 精品久久久久99| 99精品国产99久久久久久白柏| 日韩欧美一级二级三级 | 337p粉嫩大胆噜噜噜噜噜91av | 国产精品一区二区不卡| 欧美三级在线播放| 国产一区二区精品久久91| 欧美视频日韩视频在线观看| 韩国一区二区视频| 欧美日韩一区二区欧美激情| 国产乱码字幕精品高清av | 国产午夜精品理论片在线| 亚洲香肠在线观看| 欧美性生交大片| 日韩电影在线一区二区三区| 婷婷色中文字幕| 精品综合免费视频观看| 欧美日韩久久久| 国产 日韩 欧美大片| 精品人在线二区三区| 国产成人精品一区二区三区在线观看| 久久久久久久久久久久久女国产乱| 中文写幕一区二区三区免费观成熟| 国产婷婷一区二区| 三叶草欧洲码在线| 亚洲综合激情另类小说区| 国产麻豆视频在线观看| 麻豆高清免费国产一区| 欧美老女人第四色| 99久久免费精品高清特色大片| 久久精品亚洲精品国产欧美kt∨| 免费a v网站| 一区二区三区四区精品在线视频| 伊人久久久久久久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美揉bbbbb揉bbbbb| 成人精品gif动图一区| 国产性做久久久久久| 国产三级视频网站| 亚洲国产精品精华液网站 | 高清国产一区二区| 久久久亚洲综合| 91精品人妻一区二区三区蜜桃欧美 | 亚洲精品乱码久久久久久9色| 国产精品每日更新在线播放网址| 国产免费嫩草影院| 精品一二三四在线| 精品久久久久99| 中文字幕第4页| 日韩av在线播放中文字幕| 欧美日韩一本到| 三上悠亚 电影| 亚洲精品va在线观看| 草视频在线观看| 成人h动漫精品| 中文字幕一区二区三区乱码在线| 日本黄色免费片| 国产宾馆实践打屁股91| 欧美国产乱子伦| 女人裸体性做爰全过| 国内精品自线一区二区三区视频| 精品国产一区二区亚洲人成毛片 | 免费成人深夜天涯网站| 国产在线精品一区二区不卡了| 久久亚区不卡日本| 久久午夜福利电影| 精品一区二区三区免费播放| www久久久久| 国产宾馆实践打屁股91| 91官网在线观看| 91免费在线播放| 一区二区三区四区乱视频| 欧美日韩精品一区二区三区蜜桃 | 欧美一级一级性生活免费录像| 久久国产免费视频| 亚洲不卡一区二区三区| 3d动漫精品啪啪| 新91视频在线观看| 国内精品久久久久影院色| 日本一区二区三区在线不卡| 免费中文字幕日韩| 99re热这里只有精品视频| 一区二区不卡在线视频 午夜欧美不卡在 | www.四虎在线| 日韩福利视频网| 亚洲精品一区二区三区香蕉| 国产精品综合激情| av网站一区二区三区| 亚洲韩国一区二区三区| 欧美一卡在线观看| 久久日免费视频| 成人app网站| 亚洲成人激情自拍| 日韩美女一区二区三区四区| 国产性猛交xx乱| 波多野结衣在线一区| 亚洲一区二区三区视频在线播放| 欧美一级二级三级蜜桃| 俄罗斯毛片基地| www.亚洲人| 石原莉奈在线亚洲二区| 国产亚洲女人久久久久毛片| 波多野结衣亚洲色图| 亚洲av永久无码精品| 激情都市一区二区| 最新国产成人在线观看| 91.麻豆视频| 国产成人在线网址| 在线观看视频你懂得| 蜜桃久久久久久| 国产精品高潮呻吟久久| 制服.丝袜.亚洲.另类.中文| 大胸美女被爆操| 人妻巨大乳一二三区| 麻豆国产欧美一区二区三区| 最近中文字幕一区二区三区| 欧美一区二区三区在线观看视频| youjizz亚洲女人| 日批视频免费看 | 91精品国产手机| 蜜桃av.com| 日韩av无码一区二区三区不卡| 国产成人av自拍| 天使萌一区二区三区免费观看| 国产日产精品1区| 7777精品伊人久久久大香线蕉的| 日韩av片在线免费观看| 亚洲无人区码一码二码三码| 国产精品18久久久久久久久| 午夜伦欧美伦电影理论片| 国产精品国产三级国产aⅴ中文| 欧美一区二区三区公司| av女名字大全列表|