반응형

파이썬, 셀레니움 특정 요소 기다리기 & 자바스크립트로 로그인하기

 

글. 수알치 오상문

 

다음 예제는 특정 사이트에 로그인하는 예제이다.

여러분이 원하는 사이트에서는 진한 파란색 부분의 주소나 요소 선택 부분이 변경되어야 한다. 


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
import time

myid = 'myid'
mypw = 'password!'
login_page = r"로그인_사이트_URL"

browser = webdriver.Chrome()
driver = browser  # browser를 driver라는 이름으로 사용하는 경우도 많아서 복제했다.
                           # 이제는 browser 또는 driver라는 이름을  모두 사용할 수 있다.

browser.implicitly_wait(20)  # 정상 페이지 로딩 최대 허용 시간
time.sleep(2)  # 로딩한 상태더라도 화면에 뿌려주는 작업 시간도 필요

try:
    browser.get(url=login_page)

    # 1. time.sleep(2)   # 로딩한 상태더라도 화면에 뿌려주는 작업 시간도 필요 그러나 sleep은 낭비가 심하다.
    # 2. 필요한 요소가 나타날 때까지 기다리자. 일반적으로 아래 세 방법을 사용한다.


    # 참고로 이 예제는 차라리 버튼이 나타날 때까지 기다리는 게 더 좋은 방법이다.
    
    #el = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "id")))  
    #el = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="id"]')))
    el = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#id')))
    
    browser.execute_script(f"document.getElementById('id').value = '{myid}'")
    time.sleep(0.5)
    browser.execute_script(f"document.getElementById('pw').value = '{mypw}'")
    time.sleep(0.5)
    
    el = browser.find_element(By.XPATH, '//*[@id="frmNIDLogin"]/ul/li/div/div[7]')
    el.click()

except Exception as e:
    print(e)
finally:
    input("Quit?")
    browser.quit()

 

 

반응형

+ Recent posts