python(9) selenium 연습 (네이버, 페이스북, ktx)

hyukstory 혁스토리·2020년 8월 26일
0

python

목록 보기
15/35

1. 네이버 로그인

from selenium import webdriver
#import time

url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com'

driver = webdriver.Chrome('C:/TEMP/chromedriver.exe')   # 빈 브라우저 띄움
#time.sleep(3)
driver.get(url) # url 접속

driver.find_element_by_id('id').send_keys('___')   # id 입력
driver.find_element_by_id('pw').send_keys('___')      # pw 입력

#login button
# 1) himl 태그로
login_btn = driver.find_element_by_id('log.login')
login_btn.click()

# 2) xpath
driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()

# 3) javascript
id = 'dlgurtncjswo'
pw = 'Story9490'

driver.execute_script("document.getElementsByName('id')[0].value=\'"+id+"\'")
driver.execute_script("document.getElementsByName('pw')[0].value=\'"+pw+"\'")
driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()


# 4) 보안방지문자 안걸리는 법 (pyperclip))

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pyperclip

url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com'

driver = webdriver.Chrome('C:/TEMP/chromedriver.exe')   # 빈 브라우저 띄움
driver.get(url)

# 로그인 버튼을 찾고 클릭합니다
login_btn = driver.find_element_by_class_name('ico_local_login')
login_btn.click()
time.sleep(1)

# id, pw 입력할 곳을 찾습니다.
tag_id = driver.find_element_by_name('id')
tag_pw = driver.find_element_by_name('pw')
tag_id.clear()
time.sleep(1)

# id 입력
tag_id.click()
pyperclip.copy('아이디')
tag_id.send_keys(Keys.CONTROL, 'v')
time.sleep(1)


# pw 입력
tag_pw.click()
pyperclip.copy('비밀번호')
tag_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# 로그인 버튼을 클릭합니다
login_btn = driver.find_element_by_id('log.login')
login_btn.click()

2. facebook 로그인

from selenium import webdriver


url = 'https://www.facebook.com/?stype=lo&jlou=AfecEGXI9kUlVsVfdZZ_DfRotowp_JN166UM-nF_W_7vQhJkpUNmhNJz-9ePR-ZeylUvWFTsg5KDnnxJzVVt-FYXvfJZ5WTsnOVFpl4wnQ5Rng&smuh=12091&lh=Ac-k3x1B6O_dIjP_'

driver = webdriver.Chrome('C:/TEMP/chromedriver.exe')   # 빈 브라우저 띄움
driver.get(url)

driver.find_element_by_id('email').send_keys('___')   # id 입력
driver.find_element_by_id('pass').send_keys('___')    # password 입력

login_btn = driver.find_element_by_id('u_0_b')
login_btn.click()                                             # 로그인 버튼

3. ktx 티켓

from selenium import webdriver
import time

url = 'http://www.letskorail.com/'

driver = webdriver.Chrome('C:/TEMP/chromedriver.exe')   # 빈 브라우저 띄움
time.sleep(3)
driver.get(url)

# < pop-up창 없애기 >
driver.window_handles    # 창 개수 확인
driver.window_handles[0] # 메인창
driver.window_handles[1] # 첫 번째 팝업 창
driver.window_handles[2] # 두 번째 팝업 창

driver.switch_to.window(driver.window_handles[1]) # 첫 번째 팝업 창으로 제어권 옮기기
driver.close()                                    # 첫 번째 팝업 창 닫기
driver.switch_to.window(driver.window_handles[1]) # 창이 이제 두개 남았으므로 또 [1]번 째로 이동
driver.close()                                    # 두 번째 팝업 창 닫기
driver.switch_to.window(driver.window_handles[0]) # 메인 창으로 이동
time.sleep(1)

# for문으로 바꿀수 있음
#
#for i in range(0,2):
#driver.switch_to.window(driver.window_handles[1])
#driver.close()





# < 조건 검색 >
## f12 눌러서 도착역 확인
## input tag id = txtGoEnd
xpath = "//input[@id='txtGoEnd']"  # //는 이전 경로들을 축약한 뜻
## 기본값이 부산으로 되어있으므로 지우고 작업
driver.find_element_by_xpath(xpath)
driver.find_element_by_xpath(xpath).clear()
driver.find_element_by_xpath(xpath).send_keys("창원\n")
time.sleep(1)

# < 날짜 입력 >
## 달력 버튼 - img, alt - "달력"
xpath2 = "//img[@alt='달력']"
driver.find_element_by_xpath(xpath2).click()
time.sleep(1)

# < 달력 날짜 버튼 누르기 >
driver.switch_to.window(driver.window_handles[1]) # popup 창으로 제어권 넘기고
xpath4="//span[@id='d20200819']"                  # 200819 날짜 선택
driver.find_element_by_xpath(xpath4).click()
time.sleep(1)

driver.switch_to.window(driver.window_handles[0]) # 제어권 메인 창으로 넘기기 
time.sleep(1)


# < 시간 지정 >
## select  , id ="time"
xpath5="//select[@id='time']"
driver.find_element_by_xpath(xpath5).click()
driver.find_element_by_xpath(xpath5).send_keys("20")   # 20시
time.sleep(1)

# < 승차권 예매 누르기 >
xpath6="//img[@alt='승차권예매']"
driver.find_element_by_xpath(xpath6).click()
time.sleep(1)


# < 예매인지 매진 인지 구분 >
# 예매이면 예약 버튼, 매진 이면 조회 하기 
#1. 상태 확인 
# alt = "매진" or alt="예약하기"
# '예약하기'가 여러개이므로 tag와 요소로 잡지 못함.
# f12 - 우측마우스 - copy - copy full xpath
# 주소 축약 
# 예약
#"/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[1]/td[6]/a[1]/img"
#"//tbody/tr[1]/td[6]/a[1]/img"
# 매진 
#"/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[1]/td[5]/img"
#"//tbody/tr[1]/td[5]/img"

#"//tbody/tr[1]/td[6]/a[1]/img" -> "//tbody/tr[1]/td[6]//img"
#"//tbody/tr[1]/td[5]/img"      -> "//tbody/tr[1]/td[5]//img" 


# < 좌석 매진 속성값 뽑기 >
xpath7="//tbody/tr[1]/td[5]//img"
yy = driver.find_element_by_xpath(xpath7).get_attribute('alt')

# < 특실 예매 매크로 >
while True:
    if yy == "예약하기":
        driver.find_element_by_xpath(xpath7).click()
        break
    else:
        driver.refresh()
        
        
# < 일반실 예매 처리 >
xpath8="//tbody/tr[1]/td[6]//img"
yy1=driver.find_element_by_xpath(xpath8).get_attribute('alt')
while True:
    if yy1 == "예약하기":
        driver.find_element_by_xpath(xpath8).click()
        break
    else:
        driver.refresh()
profile
문돌이의 고군분투 개발 공부

0개의 댓글