일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Leviathan
- 리눅스 커널
- 커널
- 포너블
- C언어
- Bandit
- 컴퓨터구조
- 시그널
- 시스템
- write up
- 리눅스커널
- 시스템 프로그래밍
- wargame
- pwncollege
- 알고리즘
- css
- 프로그래밍
- kernel
- multiplexing
- Pwnable.kr
- C++
- 하드링크
- radare2
- 어셈블리어
- 시스템해킹
- 시스템프로그래밍
- 리버싱
- pwn.college
- 워게임
- 리눅스
Archives
- Today
- Total
Computer Security
#5 Selenium을 이용한 매크로(좌석선택) 본문
이번 포스팅에서는 보안문자를 칠 때까지 딜레이가 된후 보안문자가 쳐지면, 바로 좌석 선택 -> 카카오 페이 결제 수단까지 나오게끔 하는 조금 더 디테일한 매크로를 만들어 볼 예정이다.
앞서 포스터와 같이 악용할 사례가 있기에, 코드 몇줄을 없앨 예정이다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
import datetime as dt
from selenium.webdriver.support.ui import Select
ID = 'ID' #ㅁㅁㅁㅁㅁ사용자 아이디 입력ㅁㅁㅁㅁㅁ
PWD = 'PW^^' #ㅁㅁㅁㅁㅁ사용자 비번 입력ㅁㅁㅁㅁㅁ
driver = webdriver.Chrome('./chromedriver.exe')
# 사이즈조절
driver.set_window_size(1920, 1080) # (가로, 세로)
driver.get('site') # 페이지 이동
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(ID)
userPwd = driver.find_element(By.ID, 'userPwd')
userPwd.send_keys(PWD)
userPwd.send_keys(Keys.ENTER)
def wait_until(xpath_str):
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, xpath_str)))
driver.get('site 예매')
#ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#예매 창
endhope=False
while not endhope:
tim=dt.datetime.now()
if tim.second>=59 and tim.microsecond>800000:
driver.refresh()
endhope=True
print(tim)
else:
time.sleep(0.1)
print(tim)
#정해진 시간에 새로 고침
time.sleep(2)
pop=driver.find_element(By.XPATH, '//*[@id="div_checkDontsee_PT002_46_1"]/div[2]/button')
pop.click()
time.sleep(2)
ticket1=driver.find_element(By.XPATH,'/html/body/div[6]/div[4]/div[4]/div[5]/div[5]')
ticket1.click()
driver.switch_to.window(driver.window_handles[1])
time.sleep(10)
seat = driver.find_element(By.CSS_SELECTOR, 'body > div.wrap > div.bodyZone > div.groundList > div.list > a')
seat.click()
auto = driver.find_element(By.XPATH,'/html/body/div[1]/div[3]/div[2]/div[3]/a[1]/img')
auto.click() #일반석 후 자동선택 클릭
frame = wait.until(EC.presence_of_element_located((By.ID, "ifrmBookStep")))
driver.switch_to.frame(frame)
ticket_select=driver.find_element(By.XPATH,'//select[@name="SeatCount"]/option[text()="1매"]')
ticket_select.click()
next_1 = driver.find_element(By.XPATH,'//*[@id="SmallNextBtnImage"]') #다음단계 클릭
next_1.click()
driver.switch_to.frame('ifrmBookStep')
wait_until('//*[@id="Delivery"]')
live = driver.find_elements(By.ID,'Delivery') #현장수령 클릭
len(live)
live[0].click()
YYMMDD = driver.find_element(By.ID, 'YYMMDD') #ㅁㅁㅁㅁㅁㅁㅁㅁㅁ사용자 생년월일 입력ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ
YYMMDD.send_keys('YYMMDD')
driver.switch_to.default_content()
next_2 = driver.find_element(By.XPATH,'//*[@id="SmallNextBtnImage"]')
next_2.click() #다음 단계 클릭
time.sleep(2)
kakaopay = driver.find_element(By.XPATH,'//*[@id="Payment_22084"]/td/input')
kakaopay.click() #결제수단 카카오페이 클릭
driver.switch_to.default_content()
next_3 = driver.find_element(By.XPATH,'//*[@id="SmallNextBtnImage"]')
next_3.click() #다음 단계 클릭
driver.switch_to.frame('ifrmBookStep')
wait_until('//*[@id="checkAll"]')
agree= driver.find_element(By.XPATH,'//*[@id="checkAll"]')
agree.click() #모두 동의하기
time.sleep(2)
next_last = driver.find_element(By.XPATH,'//*[@id="LargeNextBtnImage"]')
next_last.click() #마지막 단계 클릭
이 포스팅에 대한 디테일적인 핵심은 iframe이다.
프레임을 지정해주는 것은 쉽게 말해 컴퓨터가 바라보는 시점을 지정해 주는 느낌과 같다.
예를 들어서 내가 TV를 보게끔 해보자. 그러면, 나 같은 경우는 TV근처 부분도 보이겠지만, 컴퓨터 입장에서는 TV안의 내용만 보게 된다.
그런데, TV밖의 일을 시키게 된다면?
element를 찾지 못하고 오류가 나게 된다.
'프로그래밍 > Python 웹 스크래핑' 카테고리의 다른 글
#4 Selenium을 이용한 매크로(자동배정) (0) | 2022.07.01 |
---|---|
#3 XPATH를 이용한 주요 뉴스 불러오기 (0) | 2022.06.29 |
#2 XPATH를 활용한 네이버웹툰 실시간 급상승 불러오기 (0) | 2022.06.28 |
#1 XPATH를 활용한 네이버 항공권 최저가 불러오기 (0) | 2022.06.27 |
Comments