python 그림 슬라이딩 인증 코드 를 돌아 PTA 의 모든 제목 기능 부 원 코드 를 얻 습 니 다.
먼저 페이지 를 열 면 사람 이 멍청 하 다.PTA 의 제목 은 비동기 로 불 러 와 외로움(빈 데이터)을 기어 올 랐 다.AJAX 는 잘 모 르 는데 갑자기 selenium 이 생각 났 어 요.
selenium 은 사람의 조작 을 모 의 하여 브 라 우 저 로 하여 금 자동 으로 동작 을 수행 하 게 할 수 있 습 니 다.구체 적 인 것 은 스스로 알 아 보고 더 이상 말 하지 않 겠 습 니 다.건어물 이 왔 다.
로그 인 인터페이스 에 그림 의 미끄럼 인증 코드 가 있 습 니 다.
그것 을 푸 는 가장 좋 은 방법 은 opencv,opencv 가 강하 고 스스로 이해 하 는 것 이다.
아이디어 시작:
1.배경 그림 과 미 끄 러 질 수 있 는 그림 다운로드
2.opencv 로 이 두 그림 의 가장 일치 하 는 위 치 를 매 칭 합 니 다.어떻게 실현 하 는 지 신경 쓰 지 마 세 요.알고리즘 은 BT 입 니 다.저 같은 수학 에 합격 하지 못 한 사람 이 생각 할 수 있 는 것 이 아 닙 니 다.최종 적 으로 일치 도가 가장 높 은 XY 값 을 얻 을 수 있 습 니 다.
3.Y 값 을 고려 할 필요 가 없 기 때문에 슬라이더 를 끌 어 당 기 는 것 은 X 값 입 니 다.selenium 에서 잡 은 함 수 를 호출 하여 X 값 을 넣 고 브 라 우 저 를 자동 으로 미 끄 러 뜨리 면 됩 니 다.
메모:알고리즘 문제 로 한 번 에 성공 하지 못 할 수도 있 습 니 다.프로그램 을 다시 시작 하거나 코드 를 바 꾸 면 됩 니 다.
4.들 어가 면 셀 레 니 움 의 각종 조작 으로 기어 오 르 면 된다.
다음은 소스 코드 입 니 다.
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import requests
import time
import numpy
import cv2
import os
# :
# ,
# WebDriver , chrome
web = webdriver.Chrome(r'd:\chromedriver.exe')
web.implicitly_wait(5)
# WebDriver get
web.get('https://pintia.cn/auth/login')
zh = web.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/form/div[1]/div[1]/div/div/div[1]/input')
mm = web.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/form/div[1]/div[2]/div/div/div[1]/input')
# PTA :
zh.send_keys('******@qq.com')
mm.send_keys('******')
#
web.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/form/div[2]/button/div/div').click()
# ,
time.sleep(2)
#bg
bg_img_src = web.find_element_by_xpath(
'/html/body/div[3]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/img[1]').get_attribute('src')
#front
front_img_src = web.find_element_by_xpath(
'/html/body/div[3]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/img[2]').get_attribute('src')
#
with open("bg.jpg", mode="wb") as f:
f.write(requests.get(bg_img_src).content)
with open("front.jpg", mode="wb") as f:
f.write(requests.get(front_img_src).content)
#
bg = cv2.imread("bg.jpg")
front = cv2.imread("front.jpg")
js = 'alert(" python , 。 , 42~44 ");'
web.execute_script(js)
time.sleep(15)
# ,
bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY)
# ,
front = cv2.cvtColor(front, cv2.COLOR_BGR2GRAY)
front = front[front.any(1)]
# cv xy
result = cv2.matchTemplate(bg, front, cv2.TM_CCOEFF_NORMED)
#numpy xy, xy ,x=y,y=x
x, y = numpy.unravel_index(numpy.argmax(result), result.shape)
#
div = web.find_element_by_xpath('/html/body/div[3]/div[2]/div/div/div[2]/div/div[2]/div[2]')
# , y x
ActionChains(web).drag_and_drop_by_offset(div, xoffset=y // 0.946, yoffset=0).perform()
# , , 100%, 1~2
for page in range(0, 1000):
time.sleep(1)
# PTA , page
web.get('https://pintia.cn/problem-sets?tab=1&filter=all&page={page_}'.format(page_=page))
# ,A_s a ,urls
A_s = web.find_elements_by_class_name('name_QIjv7')
urls = []
for a in A_s:
urls.append(a.get_attribute('href'))
# ,
if urls.__len__() == 0:
print(' ')
os._exit()
#
for url in urls:
web.get(url)
#
tm = web.find_elements_by_css_selector("[class='problemStatusRect_3kpmC PROBLEM_ACCEPTED_1Dzzi']")
tm_total = 0
for i in range(0, 1000):
#
try:
tm_type = web.find_element_by_xpath(
'/html/body/div/div[3]/div[2]/div/div[2]/div[{i_}]/div/div[2]'.format(i_=i * 2 + 2)).text
# / , ,
if tm_type == ' ' or tm_type == ' ':
tm_total += int(web.find_element_by_xpath(
'/html/body/div/div[3]/div[2]/div/div[2]/div[{i_}]/a/div/div'.format(i_=i * 2 + 2)).text[0])
except:
break
# / ,
if tm_total != 0:
tm = tm[-tm_total:]
else:
tm = []
#
for tm_index in tm:
try:
tm_index.click()
time.sleep(0.5)
#
tm_title = web.find_element_by_css_selector(
"[class='text-center black-3 text-4 font-weight-bold my-3']").text
mycode = web.find_element_by_css_selector('textarea').get_attribute('value')
print(' :' + tm_title)
print(mycode)
#
except:
continue
여기 서 python 이 그림 슬라이딩 인증 코드 를 돌아 PTA 의 모든 문제 기능 에 소스 코드 를 추가 하 는 것 에 관 한 글 을 소개 합 니 다.더 많은 관련 python 그림 슬라이딩 인증 코드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 십시오.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.