[Selenium] Selenium 을 이용하여 복권 구매 자동화 만들어보기 #3
오늘은 동행복권 사이트 로그인 기능을 만들어 보려합니다. 로그인 과정에 필요한 기능은 간단하게 아래와 같습니다.
1. 버튼 클릭 기능
2. input 에 텍스트 입력 기능
이전 단계에서 팝업 닫고 메인 페이지로 돌아오도록 하였습니다. 로그인 단계를 selenium 단계로 보면 아래와 같습니다.
1. 메인페이지에서 로그인 버튼 찾기
2. 로그인 버튼 클릭
3. 아이디 input 찾기
4. 아이디 입력
5. 비밀번호 input 찾기
6. 비밀번호 입력
7. 엔터키 입력
위 작업은 간단하기 때문에 사전에 필요한 작업을 먼저 하겠습니다.
python-dotenv 설치
pip install python-dotenv
python-dotenv 의 역할은 .env 파일을 읽어올 수 있게 합니다.
클릭 함수 작성
def click(element):
element.click()
위 함수는 보이시는대로 element 를 넘겨주면 클릭하는 함수입니다.
문자 입력 함수 작성
def send_keys(element, text):
element.send_keys(text)
위 코드도 보이시는대로 문자를 입력하는 함수입니다. 처음 보면 생소할 수 있지만 selenium 에서는 send_keys 를 사용하여 문자를 입력합니다.
환경 변수 읽어오기
from dotenv import load_dotenv
import os
load_dotenv()
상단에 위 코드를 넣어줍니다. 그러면 아래 코드처럼 환경 변수 파일인 .env 파일을 불러올 수 있습니다.
os.environ.get('ID')
.env 파일을 만들어서 관리하는 이유는 이 프로젝트가 private repository 이면 상관이 크게 없을 수 있지만 public 하면 .env 로 계정 정보를 나만 알 수 있도록 관리하는 것이 필요합니다. 또한 때에 따라 다를 수 있지만 .env 에 중요한 계정 정보나 키를 넣어 놓게 되면 관리에 유용하기에 환경 변수 파일을 자주 생성해서 관리합니다.
.env 파일은 KEY=VALUE 형식으로 ID=FOO 라고 입력하고 os.environ.get('ID') 의 출력 결과는 FOO 가 나오게 됩니다.
print(os.environ.get('ID')) #FOO
이제 사전 작업이 끝났습니다. 사전 작업이 끝나면 이후 작업 또한 거의 끝났습니다.
1. 메인페이지에서 로그인 버튼 찾기
크롬 개발자 도구를 통해 로그인 버튼을 찾고 xpath 를 복사하였습니다.
click(driver.find_element(By.XPATH, '/html/body/div[1]/header/div[2]/div[2]/form/div/ul/li[1]/a'))
send_keys(driver.find_element(By.ID, 'userId'), os.environ.get('ID'))
send_keys(driver.find_element(By.NAME, 'password'), os.environ.get('PW'))
send_keys(driver.find_element(By.NAME, 'password'), Keys.ENTER)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from dotenv import load_dotenv
import os
load_dotenv()
def create_driver():
return webdriver.Chrome(service=Service('./driver/chromedriver_mac64_m1_97'))
driver = create_driver()
driver.get('https://dhlottery.co.kr/common.do?method=main')
def get_main_handle(main_url):
for window_handle in driver.window_handles:
driver.switch_to.window(window_handle)
print(f'현재 핸들러 name : {driver.current_window_handle}')
print(f'현재 url : {driver.current_url}')
print('')
if main_url in driver.current_url:
return window_handle
raise '메인 핸들러 찾지 못함'
def close_windows_if_not_main_url(main_url):
main_handle = get_main_handle(main_url)
for window_handle in driver.window_handles:
if main_handle != window_handle:
driver.switch_to.window(window_handle)
driver.close()
driver.switch_to.window(main_handle)
def send_keys(element, text):
element.send_keys(text)
def click(element):
element.click()
close_windows_if_not_main_url('common.do?method=main')
click(driver.find_element(By.XPATH, '/html/body/div[1]/header/div[2]/div[2]/form/div/ul/li[1]/a'))
send_keys(driver.find_element(By.ID, 'userId'), os.environ.get('ID'))
send_keys(driver.find_element(By.NAME, 'password'), os.environ.get('PW'))
send_keys(driver.find_element(By.NAME, 'password'), Keys.ENTER)
댓글
댓글 쓰기