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 미끄럼 검증 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.