호요랩 자동 출석 체크 프로그램 만들기 프로젝트3(로딩 지연 문제 + 백그라운드에서 실행)

1. 로딩 지연 문제

 

프로그램은 한줄 실행이 성공하면 바로 다음줄로 넘어가는데,

 

웹드라이버의 로딩이 안되어있다보니, 프로그램이 해당 요소를 찾지 못해 에러나는 경우가 있다

 

로딩 속도가 프로그램 속도를 따라오지 못해 에러가 나는 경우가 있다는 것

 

etc-image-0

 

 

import time

 

time.sleep()으로 지연시간을 두는 방법이 있는데, 이래도 안되는 경우가 종종 있다

 

이때 요소가 로딩이 될때까지 기다리고, 로딩이 되면 실행을 하는 방법이 있다는데

 

WebDriverWait와 EC.presence_of_element_located를 이용하면 된다

 

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

id = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//input[@name='username' and @type='text']"))
)
id.click()

 

 

EC.presence_of_element_located는 해당 요소가 나올때까지 최대 10초 기다리고,

 

로딩이 완료되면 즉시 진행한다는 뜻을 나타낸다

 

# 닫기 버튼 클릭
wait = WebDriverWait(driver, 10)  # 최대 10초 대기

button = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'guide-close')]")))
button.click()

 

 

비슷하게 EC.element_to_be_clickable()는 요소가 존재하면서도 클릭이 가능한 상태가 될때까지 대기함

 

 

 

2. 백그라운드에서 실행

 

프로그램을 실행하면, 웹드라이버 창이 보이는데

 

etc-image-1

 

 

사용자 입장에서 생각해보면, 실행중인 창이 안보이게, 은근슬쩍? 의식하지 않아도 출석체크가 자동으로 이루어졌으면 한다

 

실행중인 창이 보이면 이거 끝날때까지? 기다려야하니까

 

차라리 안보이게 실행되는 방법이 있나?

 

from selenium.webdriver.chrome.options import Options

# Chrome 옵션 설정
chrome_options = Options()
chrome_options.add_argument("--headless")  # GUI 없이 실행

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://act.hoyolab.com/ys/event/signin-sea-v3/index.html?act_id=e202102251931481&hyl_auth_required=true&hyl_presentation_style=fullscreen&utm_source=hoyolab&utm_medium=tools&lang=ko-kr&bbs_theme=light&bbs_theme_device=1")  # 원하는 웹사이트 URL

 

 

 

Options에서 headless 모드가 있다

 

이러면 창이 안보이게 스리슬쩍 은근슬쩍 무의식적으로 실행된다

 

실행이 끝나면 프린트문 해주는거 좋고

 

etc-image-2

728x90