opencv 기반 selenium 슬라이딩 인증 코드 구현
최근 많은 사람들 이 미끄럼 인증 코드 를 어떻게 처리 해 야 할 지 에 대해 이 야 기 를 나 누 었 기 때문에 직접 해 보기 로 했다.
뭐 하나 만 들 기 전에우 리 는 우선 이 물건 의 조작 과정 에 대해 대략적인 이 해 를 가 져 야 한다.
인증 코드 페이지 를 엽 니 다드래그 버튼
드래그 버튼 을 드래그 합 니 다4.567917.그림자 가 빨리 겹 치 는 위치 로 드래그 합 니 다드래그 버튼 을 놓 으 세 요
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
artice = browser.find_element_by_class_name('geetest_slider_button') #
action = ActionChains(browser)
action.click_and_hold(artice).perform() #
action.reset_actions()
action.pause(0.01).move_by_offset(step, 0).perform() #step
action.release(artice).perform() #
위 에서 본 측 이 사용 하 는 Action Chains 에 관 한 방법 이 있 습 니 다.다른 방법 은 여기 서 많이 소개 할 뿐 입 니 다.더 알 고 싶 은 것 은 돌려 주세요seleniun ActionChains 마우스 키보드 조작다음은 제 가 이번에 소개 할 중점,미끄럼 거리 에 대한 소개,즉 그림 이 그림자 구역 의 위 치 를 구 하 는 것 입 니 다.
여기 서 저 는 opencv 라 이브 러 리 를 사 용 했 습 니 다.주요 절 차 는 다음 과 같 습 니 다.
이미지 이치 화
4.567917.이치 화 된 이미지 에 대해 고 스 퍼 지 를 한다
import cv2 as cv
import numpy as np
import math
#
def FindLines(image):
image = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #
blurred = cv.GaussianBlur(image, (5, 5), 0) #
canny = cv.Canny(blurred, 200, 400) # canny
lines = cv.HoughLinesP(canny, 1, np.pi / 180, 20, minLineLength=15, maxLineGap=8) #
return lines[:, 0, :] #
#
def FindResultLises(lines):
resultLines = []
for x1, y1, x2, y2 in lines:
if (abs(y2 - y1) < 5 or abs(x2 - x1) < 5) and min(x1, x2) > 60: # 60
resultLines.append([x1, y1, x2, y2])
return resultLines
#
def distAbs(point_exm, list_exm):
x, y = point_exm
x1, y1, x2, y2 = list_exm
dist_1 = math.sqrt(abs((y2 - y1) + (x2 - x1) + 1)) #
dist_2 = math.sqrt(abs((y1 - y) + (x1 - x) + 1)) + math.sqrt(abs((y2 - y) + (x2 - x) + 1)) #
return abs(dist_2 - dist_1)
# y = kx + b
def findPoint(line1, line2):
poit_status = False
x1, y1, x2, y2 = line1
x3, y3, x4, y4 = line2
x = y = 0
if (x2 - x1) == 0: # x
k1 = None
b1 = 0
else:
k1 = 1.0 * (y2 - y1) / (x2 - x1)
b1 = y1 * 1.0 - k1 * x1 * 1.0
if (x4 - x3) == 0:
k2 = None
b2 = 0
else:
k2 = 1.0 * (y4 - y3) / (x4 - x3)
b2 = y3 * 1.0 - k2 * x3 * 1.0
if k1 is None:
if not k2 is None:
x = x1
y = k2 * x1 + b2
poit_status = True
elif k2 is None:
x = x3
y = k1 * x3 + b1
poit_status = True
elif k1 != k2:
x = (b2 - b1) * 1.0 / (k1 - k2)
y = k1 * x * 1.0 + b1 * 1.0
poit_status = True
return poit_status, [x, y]
#
def linePoint(resultLines):
for x1, y1, x2, y2 in resultLines:
for x3, y3, x4, y4 in resultLines:
point_is_exist, [x, y] = findPoint([x1, y1, x2, y2], [x3, y3, x4, y4]) #
if point_is_exist:
dist_len1 = distAbs([x, y], [x1, y1, x2, y2])
dist_len2 = distAbs([x, y], [x3, y3, x4, y4])
if dist_len1 < 5 and dist_len2 < 5: # 5
#
if abs(y2 - y1) < 5:
# x1
if abs(x1 - x) + abs(y1 - y) < 5: #
return -1, [x, y]
else:
return 1, [x, y]
else:
# x2
if abs(x3 - x) + abs(y3 - y) < 5:
return -1, [x, y]
else:
return 1, [x, y]
return 0, [0, 0]
if __name__ == '__main__':
img = cv.imread(r'C:\Users\Administrator\Desktop\opencv\temImg.png')
lines = FindLines(img)
lines = FindResultLises(lines)
L_or_R, point_x = linePoint(lines) # L_or_R
xoffset = point_x[0]
yoffset = point_x[1]
cv.circle(img, (int(xoffset), int(yoffset)), 5, (0, 0, 255), 3)
cv.imshow('circle', img)
cv.waitKey(0)
cv.destroyAllWindows()
효과 도
물론 조작 할 수 없 는 그림 도 있 습 니 다.여러분 이 관심 있 는 것 은 그 중의 인 자 를 시도 하고 수정 할 수 있 습 니 다.
미끄럼 인증번호
위 에서 우 리 는 이미 가장자리 점 을 찾 았 고 교점 이 왼쪽 인지 오른쪽 인지 에 따라 계산 하여 우리 가 미 끄 러 질 마지막 값 을 찾 았 다.
if L_or_R == 1:
x_offset = xoffset - 20 # 20
else:
x_offset = offset + 20
미끄럼 거리 가 생 겼 으 니 다음은 미 끄 러 질 것 이다.우리 가 직접
action.move_by_offset(x_offset,0).perform()
그림 을 사용 하면 괴물 에 게 잡 아 먹 혔 음 을 보 여 준다.그것 은 바로 운동 궤적 이 정상 인 이 아 닌 행동 으로 검출 되 는 것 이다.정상 인 은 당기 기만 하면 대응 하 는 위치 로 끌 어 올 리 기 어렵 기 때문이다.미끄럼 궤적 알고리즘
그래서 우 리 는 사람의 정상 적 인 조작 을 모 의 하 는 드래그 궤적 이 있어 야 한다.다음은 먼저 속 도 를 내 고 속 도 를 줄 이 는 궤적 이다.
import ramdom
#
def moveTrack(xoffset):
updistance = xoffset*4/5
t = 0.2
v = 0
steps_list = []
current_offset = 0
while current_offset<xoffset:
if current_offset<updistance:
a = 2 + random.random() * 2
else:
a = -random.uniform(12,13)
vo = v
v = vo + a * t
x = vo * t + 1 / 2 * a * (t * t)
x = round(x, 2)
current_offset += abs(x)
steps_list.append(abs(x))
# sum(steps_list) , ,
disparty = sum(steps_list)-xoffset
last1 = round(-random.random() - disparty, 2)
last2 = round(-disparty-last1, 2)
steps_list.append(last1)
steps_list.append(last2)
return steps_list
궤적 이 있 으 면 우 리 는 순환 을 통 해 버튼 을 끌 수 있다.주의해 야 할 것 은 매번 순환 할 때마다steps_list
그렇지 않 으 면 그 는 이전의 거리 도 계산 하고 순환 이 끝나 면 버튼 을 놓 는 것 을 기억 해 야 한 다 는 것 이다.
for step in steps_list:
action.reset_actions()
action.pause(0.01).move_by_offset(step, 0).perform()
action.release(artice).perform()
opencv 기반 selenium 미끄럼 인증 코드 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 opencv selenium 미끄럼 인증 코드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ip camera android에 액세스하고 java를 사용하여 모니터에 표시그런 다음 PC에서 다운로드 폴더를 추출해야 합니다 그런 다음 프로젝트 폴더에 다운로드한 javacv 라이브러리를 추가해야 합니다. 먼저 라이브러리 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 jar/폴더 추가를 선택...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.