python 그림 슬라이딩 인증 코드 를 돌아 PTA 의 모든 제목 기능 부 원 코드 를 얻 습 니 다.

최근 에는 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 그림 슬라이딩 인증 코드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 십시오.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기