매번 사이트에서 접속해서 출석체크를 통해 포인트나 보상을 받고 있는 경우가 많다.
마찬가지로 출석체크를 하는데, 매일하는 것이 무척 귀찮았다.
그래서 Python의 Selenium을 사용해서 자동화 툴을 만들기로 했다.
Linux나 Mac에서도 물론 가능하다.
python -m venv attendance_env
source attendance_env/bin/activate # Mac/Linux
attendance_env\Scripts\activate # Windows
pip install selenium
pip install webdriver_manager
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
# 사용자 정보 입력
yesfile_id = "your_id" # 사이트 아이디
yesfile_pw = "your_password" # 사이트 비밀번호
# 크롬 드라이버를 다운받아 사용
options=Options()
service=Service(ChromeDriverManager().install())
driver=webdriver.Chrome(service=service,options=options)
try:
# 예스파일 로그인 페이지 접속
driver.get("https://example.com")
# 아이디 입력
id_input = driver.find_element(By.NAME, "user_id") # 아이디 입력창의 name 값 입력
id_input.send_keys(yesfile_id)
# 비밀번호 입력
pw_input = driver.find_element(By.NAME, "user_pw") # 비밀번호 입력창의 name 값 입력
pw_input.send_keys(yesfile_pw)
pw_input.send_keys(Keys.RETURN)
time.sleep(3) # 로그인 처리 대기
# 출석체크 페이지로 이동
driver.get("https://example.com/attendance")
time.sleep(2) # 페이지 로딩 대기
# 출석체크 버튼 클릭
checkin_button = driver.find_element(By.CLASS_NAME, "attendance-button") # 실제 클래스명으로 변경 필요
checkin_button.click()
print("출석체크 완료!")
except Exception as e:
print(f"오류 발생: {e}")
finally:
time.sleep(3)
driver.quit()
from selenium.webdriver.common.by import By
웹 페이지에서 요소(버튼, 입력창 등)를 찾을 때 사용하는 "찾는 방법"들을 제공한다.
By는 ID, NAME, CLASS_NAME, TAG_NAME, CSS_SELECTOR, XPATH 같은 다양한 방식으로 HTML 요소를 찾을 수 있도록 도와주는 도구이다.
from selenium.webdriver.common.keys import Keys
실제 키보드에서 누르는 것처럼 특수 키(엔터, 탭, 방향키 등)를 누를 수 있게 한다.
Keys.RETURN, Keys.ENTER, Keys.TAB, Keys.ESCAPE, Keys.ARROW_DOWN 등등 사용 가능하다.
id_input = driver.find_element(By.NAME, "user_id")
웹 페이지에서 <input> 태그 중에 name="user_id"인 입력 칸(아이디 입력창)을 찾아서, id_input이라는 변수에 저장한다.
id_input.send_keys(yesfile_id)
방금 찾은 아이디 입력창(id_input)에 yesfile_id 변수에 들어 있는 값을 키보드로 입력하듯 자동으로 타이핑한다.
pw_input.send_keys(Keys.RETURN)
pw_input이라는 비밀번호 입력창에 Enter 키를 누른 것처럼 동작하게 한다.
혹시 누군가가 시크릿 탭으로 가능한지 궁금해 한다면 밑의 코드를 추가하면 된다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--incognito") # 시크릿 모드 옵션
options.add_argument("--headless=new") # 최신 헤드리스 모드
이후의 내용하면 아래 링크로 ㄱㄱ
링크