Programming, IT, Algorithm, Security
article thumbnail

Selenium 이란?

 셀레늄(Selenium)은 WebDriver를 사용하여기능/승인 테스트를 작성하는 간단한 API를 제공합니다. Selenium Python API를 통해 직관적인 방식으로 Selenium WebDriver의 모든 기능에 액세스할 수 있습니다.

 

설치하려면 파이썬 설치 후, pip install selenium 해주고 현재 설치한 브라우저와 버전에 맞는 WebDriver를 사용해야한다.

 

아래 브라우저 중 자신의 브라우저를 클릭하여 자신에게 맞는 웹드라이버를 설치하면 된다.

현재, 나는 크롬 브라우저를 사용하고 있으므로 ChromeDriver를 설치해주었다.

 

 

직접 코딩한 매크로

설치가 완료되었다면, 이제 python 코드를 실행하기만 하면 끝이다.

11st macro test - share.py
0.00MB

위 파이썬 코드를 다운받고, webdriver 경로와 id, pw 값을 자신에 맞게 수정하고 실행하면 작동한다.

 

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
from selenium.webdriver.remote.webdriver import WebDriver

url = 'http://m.11st.co.kr/products/m/3167879989?prdNo=3167879989' #target product url

login_url = 'https://login.11st.co.kr/auth/login.tmall' 
test_url = 'http://m.11st.co.kr/products/m/3790446970?prdNo=3790446970'
                    
opts = Options()
#User-Agent 모바일 환경으로 설정
opts.add_argument("user-agent= Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36")
opts.add_argument('--window-size=400,830')
#opts.add_argument('start-maximized')
# #이미지 로드 비활성화 설정
# prefs = {"profile.managed_default_content_settings.images": 2}
# opts.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(executable_path="\\chromedriver.exe", chrome_options=opts)
 #executable_path에  크롬드라이버 경로 입력
driver.get(login_url)

global start
start = 0
ID = driver.find_element(By.ID, 'memId')
PW = driver.find_element(By.ID, 'memPwd')
button_login = driver.find_element(By.ID, 'loginbutton')
ID.send_keys('id')#여기에 아이디 입력하기
PW.send_keys('password')#비밀번호 입력하기
button_login.click()


#driver.implicitly_wait(time_to_wait=10)
#driver.get("https://google.com")
#driver.get(test_url)
#구매버튼 나올때 까지 대기 timeout a초로 b초 빈도로 확인

def ex_chk(Xpath): ##버튼 로드 감지함수
    global start
    while(True):
        try:
            btn_buy_exist = EC.element_to_be_clickable((By.XPATH, Xpath))
            WebDriverWait(driver,0.6,poll_frequency=0.2).until(btn_buy_exist)
            print('버튼 감지...')
            start = 1
            break
        except:
            print('Cannot Found Button')
            if(start == 0):         
                driver.execute_script("location.reload()")
             #현재 페이지 새로고침 #현재 페이지 새로고침
            #driver.quit() #종료

ex_chk('/html/body/div[3]/div/div[1]/button')
###############################
btn_buy = driver.find_element(By.XPATH, '/html/body/div[3]/div/div[1]/button')
driver.execute_script("arguments[0].click();", btn_buy)
#btn_buy.click()

ex_chk('/html/body/form/div[1]/div[3]/div[2]/button')
btn_buynow = driver.find_element(By.XPATH,'/html/body/form/div[1]/div[3]/div[2]/button')

driver.execute_script("arguments[0].click();", btn_buynow)
#btn_buynow.click() --------- 이 방식은 클릭 느리고 오류나서 자바스크립트로 클릭하는걸로 대체
print('바로구매 클릭')

ex_chk('/html/body/div[2]/section[1]/form[5]/div[28]/button')
payment = driver.find_element(By.ID, 'doPaySubmit')
driver.execute_script("arguments[0].click();", payment)
print('결제 클릭')

#다이나믹 키보드라서 감지할 방법을 알아내야함
#키패드 숫자찾기 pyautogui 이미지 서칭으로 찾기 아직 안만듦

참고로 위 프로그램은 결제 창 비밀번호 입력하는 것은 구현해놓지는 않았다.

 

 

profile

Programming, IT, Algorithm, Security

@PITAS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!