1. 로딩 지연 문제
프로그램은 한줄 실행이 성공하면 바로 다음줄로 넘어가는데,
웹드라이버의 로딩이 안되어있다보니, 프로그램이 해당 요소를 찾지 못해 에러나는 경우가 있다
로딩 속도가 프로그램 속도를 따라오지 못해 에러가 나는 경우가 있다는 것

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. 백그라운드에서 실행
프로그램을 실행하면, 웹드라이버 창이 보이는데

사용자 입장에서 생각해보면, 실행중인 창이 안보이게, 은근슬쩍? 의식하지 않아도 출석체크가 자동으로 이루어졌으면 한다
실행중인 창이 보이면 이거 끝날때까지? 기다려야하니까
차라리 안보이게 실행되는 방법이 있나?
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 모드가 있다
이러면 창이 안보이게 스리슬쩍 은근슬쩍 무의식적으로 실행된다
실행이 끝나면 프린트문 해주는거 좋고

728x90
'프로그래밍 > Python' 카테고리의 다른 글
MCP 배운 기념 간단하게 사용해보기1 (0) | 2025.04.02 |
---|---|
호요랩 자동 출석 체크 프로그램 만들기 프로젝트2(상대적 xpath? css selector?) (0) | 2025.03.16 |
호요랩 자동 출석 체크 프로그램 만들기 프로젝트1(iframe 주의하기) (0) | 2025.03.13 |
python에서 logging 간단하게 (0) | 2024.04.30 |
파이썬 파일 사용할 때 볼 수도 있는 configparser와 argparser (0) | 2024.04.29 |