python+opencv+selenium 자동화 로그 인 메 일 박스 및 미끄럼 검증 문제 해결

머리말
여러분 이 자동화 로그 인 을 할 때 슬라이더 인증 코드 가 수 동 으로 검증 해 야 하 는 문 제 를 만 났 을 수도 있 습 니 다.이번 에는 저희 가 해결 하 겠 습 니 다.
다음 과 같다.
在这里插入图片描述
  
우리 가 자동화 로그 인 을 할 때 각종 기괴 한 인증 코드 를 만 날 수 있다.슬라이더 인증 코드 는 그 중에서 가장 흔히 볼 수 있 는 것 이다.만약 우리 프로그램 이 계 정 비밀 번 호 를 자동 으로 입력 한 후에 도 우리 가 인공 적 으로 인증 번 호 를 미 끄 러 뜨 려 야 한다 면 자동화 라 고 할 수 있 습 니까?
그럼 제'문제 풀이 절차'부터 말씀 드 리 겠 습 니 다.
1.selenium 을 사용 하여 메 일 첫 페이지 를 엽 니 다.
2.계 정 비밀번호 상자 에 위치 하고 계 정 비밀 번 호 를 입력 합 니 다.
3.검증 그림 을 가 져 오고 opencv 처리 로 슬라이더 가 끌 어야 할 거 리 를 되 돌려 줍 니 다.
4.마우스 이 벤트 를 만 들 고 슬라이더 를 드래그 하여 인증 을 완료 합 니 다.
『8195』해결 해 야 할 문제:
1.페이지 요소 의 포 지 셔 닝.
2.텍스트 상자 와 인증 코드 의 frame 내장.
3.opencv 처리 검증 그림 결함 이미지 일치 및 거 리 를 되 돌려 줍 니 다.
4.webdriver 는 웹 페이지 에서 xpath 를 사용 할 때 자신의 요 소 를 어떻게 찾 습 니까?
5.원본 그림 사 이 즈 는 웹 페이지 의 실제 크기 와 같은 비율 로 크기 조정(거리의 크기 조정)합 니 다.
  OK,사고방식 이 뚜렷 하 다 코드!!!
코드:

#       
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium import webdriver

import requests
import time
import cv2

#    
def download_img(url,filename):
    r = requests.get(url)
    with open( filename + '.png', 'wb') as f:
        #          r.content        ,       yanzheng.png 
        f.write(r.content)
        print(filename + '    ')

def get_image():
    #            ?  driver    ,          ,
    #          ,                     。
    global driver
    driver= webdriver.Chrome() #       
    driver.get("https://mail.qq.com/") #      
    #       ,      ,                   
    driver.maximize_window()
    time.sleep(2) #    

    driver.find_element_by_xpath('/html/body/div/div[2]/div/div[1]/div/div[1]/div[2]').click()

    time.sleep(1)

    driver.switch_to.frame('login_frame')
    # driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()

    #      
    input=driver.find_element_by_xpath('//*[@id="u"]')#  QQ   
    time.sleep(1)
    input.send_keys("zhanghao") #       

    input=driver.find_element_by_xpath('//*[@id="p"]')#  QQ   
    input.send_keys("    ") #       
    print('        。')
    #      ,          ,             。(  )
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="login_button"]').click()

    #                 (     )
    time.sleep(1)
    driver.switch_to.frame('tcaptcha_iframe')
    #webdriver         xpath   ,            .
    #       webelement,  get   !!!!!!!
    bk = driver.find_element_by_xpath('//*[@id="slideBg"]').get_attribute('src')
    print(bk)
    #         ,     。
    key = driver.find_element_by_xpath('//*[@id="slideBlock"]').get_attribute('src')
    print(bk)

    download_img(bk,filename= 'bk')
    download_img(key,filename= 'key')

    #    
    slider = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
    #       
    dis = get_distance()
    print(dis)

    #    ,    ,   。
    newact =  ActionChains(driver)
    newact.click_and_hold(slider).perform()

    newact.move_by_offset(xoffset=dis-20,yoffset=0).perform()
    time.sleep(0.5)
    newact.release().perform()

#            。
def get_distance():
    path = 'bk.png'
    img = cv2.imread(path)

    path = 'key.png'
    img2 = cv2.imread(path)

    imgContour = img.copy()
    print('img.shape:', img.shape)

    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    imgBlur = cv2.GaussianBlur(imgGray, (3, 3), 1)
    imgCanny = cv2.Canny(imgBlur, 400, 500)

    imgGray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
    imgBlur2 = cv2.GaussianBlur(imgGray2, (3, 3), 1)
    imgCanny2 = cv2.Canny(imgBlur2, 400, 500)

    cv2.imshow("O", imgCanny)

    #     
    result = cv2.matchTemplate(imgCanny, imgCanny2, 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)

    print('min_loc:', min_loc)
    print('max_loc:', max_loc)

    #        
    cv2.rectangle(imgContour, max_loc, (max_loc[0] + 135, max_loc[1] + 135), (0, 0, 255), 2)

    #    680*390     resize 280*161,        。           。
    res = min_loc[0] / (680 / 280)

    cv2.imshow("Canny Image", imgContour)
    #      0,           ,      return          。
    cv2.waitKey(100)
    print('         。')
    return res

if __name__ == '__main__':
    get_image()
『8195』아래 는 운행 결과 이 고 두 가지 서로 다른 인증 코드 배경 도 는 모두 정확하게 식별 할 수 있다.빨 간 상 자 는 코드 가 구멍 을 식별 한 후에 표 시 된 빨 간 상자 이다.
在这里插入图片描述
在这里插入图片描述
*8195:8195:인증 코드 가 튀 어 나 온 후에 우리 프로그램 은 구멍 의 위 치 를 정확하게 식별 하고 크기 조정 후의 거 리 를 정확하게 되 돌려 주 는 것 을 볼 수 있 습 니 다.아 날로 그 마우스 사건 은 슬라이더 를 구멍 난 위치 로 완벽 하 게 끌 어 당 겼 다.인증 에 성 공 했 음 을 알려 주지 만 코드 에 정확 한 계 정과 비밀 번 호 를 주지 않 았 기 때문에 계 정 이나 비밀번호 가 잘못 되 었 음 을 알려 줍 니 다.여러분 은 정확 한 계 정 비밀 번 호 를 입력 하면 성공 적 으로 로그 인 할 수 있 습 니 다.너무 좋아요.
『8195』는 네트워크 의 안정 을 유지 하고 큰 변동 이 없 도록 주의해 야 한다.페이지 요 소 를 장시간 불 러 오지 못 하면 페이지 요 소 를 가 져 오지 못 하 는 오류 가 발생 합 니 다.
*8195°8195°발생 할 수 있 는 모든 문제 에 대해 저 는 코드 주석 에 썼 습 니 다.매우 상세 합 니 다.옆집 할 아버 지 는 보고 다 말씀 하 셨 다.
  그러면 이번 기 사 는 여기 서 마 무 리 됩 니 다.다음 에 어떤 문제 가 있 으 면 저 를 개인 적 으로 믿 거나 댓 글 에 저 를 적 셔 도 됩 니 다.
모두 에 게 마음 을 겨 루 자!
python+opencv+selenium 자동화 로그 인 메 일 박스 와 미끄럼 검증 문 제 를 해결 하 는 글 을 소개 합 니 다.더 많은 python selenium 미끄럼 검증 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기