본문 바로가기

python/인터파크티켓

인터파크티켓 매크로 만들기? 3

이번 포스팅은.....

좌석 선택하는 화면을 들어갈 때 나오는 문자열 입력까지 자동으로 하는 방법에 대한 내용입니다.

 

세상이 너무 좋아져서 오픈소스를 활용하면 문자인식에 대한 기본개념 조차 없어도 그냥... 따라 하기만 하면 가능해져버렸습니다.

 

완벽하지는 않지만..... 나쁘지 않은거 같습니다. (좀 느려서 손으로 치는게 더 빠를걸요?)

*gpu 사용 가능하면 빠를수도..

 

이번 편에서는 문자 추출을 위한 ocr 패키지를 같이 받아 줘야 합니다. 

이번 포스팅에서는 easyocr을 활용합니다.

(ocr에 대해서는 기회가 된다면 포스팅 해보겠습니다.)

 

1. Anaconda 설치하기.

그냥 파이썬을 설치 해서 pip으로 받으면 된다는데...   저는 잘안되서 아나콘다 파이썬을 사용했습니다.

구글에서 아나콘다를 검색해서 공식사이트에서 다운로드 하거나, 아래 링크로 바로 들어가서 받으실 수 있습니다.

https://www.anaconda.com/products/individual

아나콘다가 뭔지 모르시는 분들이 있겠지만 그건 중요한게 아닙니다.

그냥 받으세요.

다운받고 설치까지 해주시면 됩니다.

아나콘다 공식홈페이지 다운로드화면

2.  파이참에서 새로운 프로젝트를 생성합니다.

프로젝트를 생성할 때 아나콘다를 선택해서 생성하고 파이썬 버전을 3.8로 해주시면 됩니다.

파이썬 버전을 다른 버전으로 만들어도 가능하지만, 이번 포스팅대로 따라해서 된다는 보장은 없습니다.

3. pip으로 easyocr 설치하기.

프로젝트 생성까지 완료 되었으면, 파이참 하단에 보면 Terminal 이 보이실 겁니다. 

Terminal을 클릭해주시고 캡쳐된 화면처럼 입력해서 엔터쳐주시면 easyocr 패키지가 설치가 될겁니다.

pip install easyocr 

그리고 설치가 정상적으로 다 되었다면, 아래 화면처럼 easyor이 확인 가능합니다.

(File>Settings)

셀레니움은 하단에 보면 + 버튼 클릭해서 selenium 검색해서 인스톨패키지 하시면 됩니다

 

3번까지 설치가 정상적으로 완성 되었다면, 아래 소스를 그대로 따라만해도 인터파크티켓 사이트의 자동문자열방지를 자동으로 입력할 수 있습니다.

 

easyocr 사용방법 외 나머지는 전의 글들을 보면 알 수 있는 내용들입니다. 

 

import easyocr
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

# setup Driver|Chrome : 크롬드라이버를 사용하는 driver 생성
driver = webdriver.Chrome('./chromedriver.exe')
# 사이즈조절
driver.set_window_size(1400, 1000)
driver.get('https://ticket.interpark.com/Gate/TPLogin.asp')

driver.switch_to.frame(driver.find_element(By.XPATH, "//div[@class='leftLoginBox']/iframe[@title='login']"))
userId = driver.find_element(By.ID, 'userId')
userId.send_keys('아이디')
userPwd = driver.find_element(By.ID, "userPwd")
userPwd.send_keys('비밀번호')
userPwd.send_keys(Keys.ENTER)

goodsCode = 99999989
driver.get('https://ticket.interpark.com/Ticket/Goods/GoodsInfo.asp?GoodsCode=' + '21011619')

time.sleep(1)

driver.find_element(By.XPATH, "//*[@id='popup-prdGuide']/div/div[3]/button").click()
driver.find_element(By.XPATH, "//*[@id='productSide']/div/div[2]/a[1]").click()

# 예매하기 눌러서 팝업창이 뜨면 포커스를 새창으로 바꿔준다
driver.switch_to.window(driver.window_handles[1])
# driver.get_window_position(driver.window_handles[1])

# iframe 이동
time.sleep(1)
driver.switch_to.frame(driver.find_element(By.XPATH, "//*[@id='ifrmSeat']"))

# 입력해야될 문자 이미지 캡쳐하기.
capchaPng = driver.find_element(By.XPATH, "//*[@id='imgCaptcha']")

# easyocr 이미지내 인식할 언어 지정
reader = easyocr.Reader(['en'])
# 캡쳐한 이미지에서 문자열 인식하기
result = reader.readtext(capchaPng.screenshot_as_png, detail=0)

# 이미지에 점과 직선이 포함되어있어서 문자 인식이 완벽하지 않아서 데이터를 수동으로 보정해주기로 했습니다.
capchaValue = result[0].replace(' ', '').replace('5', 'S').replace('0', 'O').replace('$', 'S').replace(',', '')\
    .replace(':', '').replace('.', '').replace('+', 'T').replace("'", '').replace('`', '')\
    .replace('1', 'L').replace('e', 'Q').replace('3', 'S').replace('€', 'C').replace('{', '').replace('-', '')

# 입력할 텍스트박스 클릭하기.
driver.find_element_by_class_name('validationTxt').click()
# 추출된 문자열 텍스트박스에 입력하기.
chapchaText = driver.find_element_by_id('txtCaptcha')
chapchaText.send_keys(capchaValue)

#chapchaText.send_keys(Keys.ENTER)

 

 

'python > 인터파크티켓' 카테고리의 다른 글

인터파크티켓 매크로 만들기 2  (28) 2021.02.18
인터파크티켓 매크로 만들기 1  (77) 2020.08.27