반응형
[2022.01.15] selenium 을 이용한 자동화 수강 신청 프로젝트
from selenium import webdriver # 셀레니움과 웹드라이버 부르는 모듈함수
import time
import telepot
driver = webdriver.Chrome('D:\/chromedriver.exe') # 제어하기 위해 변수 선언
url = "https://uportal.catholic.ac.kr/sso/jsp/sso/ip/login_form.jsp" # 이동할 링크주소를 변수에 저장
driver.get(url) # 해당 링크로 이동
# 텔레그램 메세지 알림
token = '********':AAEK4XTUYDY3dvk6zP56k91aCvHkZdGefCw' # 봇 제어 API
my_user_id = '********' # 사용자
bot = telepot.Bot(token) # 봇의 정체성안 token 을 집어넣어줌
# ID
xpath = "//input[@id='userId']" # 입력(검색)버튼, // input[@id='srch']에다가 "" 로감싸야함
input_search = driver.find_element_by_xpath(xpath)
input_search.send_keys("ID") # id 입력
# passwd
xpath2 = "//input[@id='password']" # 입력(검색)버튼, // input[@id='srch']에다가 "" 로감싸야함
input_search = driver.find_element_by_xpath(xpath2)
input_search.send_keys("PWD") # pwd 입력
# 로그인 클릭
xpath3 = "//button[@class='n-form']" # x 버튼, //button[@class='closeBtn']에다가 "" 로감싸야함
login = driver.find_element_by_xpath(xpath3) # driver 즉,chrome으로 요소를 찾아서 x창을 끈다.
login.click() # 변수명.click() 클릭하는 소스
# 바로 수강신청_학생(성심) 이동
time.sleep(1)
url2 = "https://uportal.catholic.ac.kr/stw/scsr/scoo/scooLessonApplicationStudentReg.do"
driver.get(url2)
# 해당 개설전공 전체로 수정
xpath4 = "/html/body/div[1]/div[1]/main/section[2]/div[1]/ul/li[2]/label/select"
time.sleep(1)
all_select = driver.find_element_by_xpath(xpath4)
all_select.click() # click() 함수는 클릭함.
driver.execute_script("window.scrollTo(0,10000)") # ★ 아래로 스크룰바 쫙 내림 y가 세로내리는길이 +10000은 밑 / -10000 맨 위
# full xpath 사용 (개설전공 - 전체(full xpath))
xpath5 = "/html/body/div[1]/div[1]/main/section[2]/div[1]/ul/li[2]/label/select/option[1]"
driver.find_element_by_xpath(xpath5).click() # click() 함수는 클릭함.
# 교과목명 검색 (컴퓨터) 입력
xpath6 = "/html/body/div[1]/div[1]/main/section[2]/div[1]/ul/li[5]/label/input"
subject = driver.find_element_by_xpath(xpath6)
subject.click()
#subject.send_keys("인간학1") # 인간학1 입력
subject.send_keys("웹프로그래밍") # test 회계학원론 입력
# 조회버튼 클릭
xpath7 = "/html/body/div[1]/div[1]/main/section[2]/div[1]/ul/li[6]/button"
driver.find_element_by_xpath(xpath7).click() # click() 함수는 클릭함.
### 숫자값을 text로 긁어오는 과정
# 제대로 출력됨 41 제한인원
##xpath9 = driver.find_element_by_xpath("//div[@class='ucups-reg-app-table-flow']/table[@class='ucups-reg-app-table']/tbody[@id='jsrSchedGrid']/tr[2]/td[9]") # 수강신청인원 41
##print(xpath9.text)
## 제대로 출력됨 41 수강신청인원
##xpath10 = driver.find_element_by_xpath("//div[@class='ucups-reg-app-table-flow']/table[@class='ucups-reg-app-table']/tbody[@id='jsrSchedGrid']/tr[2]/td[8]") # 제한인원 41
##print(xpath10.text)
#time.sleep(초) 이란?
# 시간 지연을 넉넉히 줘야 값을 받아오기전에 제대로 수행
# 기다리는 시간이 길어질수록: 정확한 동작을 보장하지만 실행속도가 느려짐
# 기다리는 시간이 짧아질수록: 실행속도가 빨라지지만, 네트워크 상태가 안좋으면 망할 수 있음
# ★★★★수강신청 매크로 과목마다 수정법★★★★★
# ★★★★ 해당하는 분반에 수강신청 버튼 full xpath 수정 해야함★★★★
# ★★★★ 조회시 tr은 첫번 째, tr[2]는 두번째 뜨는것을 의미함 , 이것도 수정해줘야함★★★★
while True :
# 조회버튼 클릭
xpath7 = "/html/body/div[1]/div[1]/main/section[2]/div[1]/ul/li[6]/button"
driver.find_element_by_xpath(xpath7).click() # click() 함수는 클릭함.
time.sleep(2)
# 제한인원 수 비교
xpath9 = driver.find_element_by_xpath("//div[@class='ucups-reg-app-table-flow']/table[@class='ucups-reg-app-table']/tbody[@id='jsrSchedGrid']/tr[1]/td[9]") # 수강신청인원 41
# 수강신청인원 비교
xpath10 = driver.find_element_by_xpath("//div[@class='ucups-reg-app-table-flow']/table[@class='ucups-reg-app-table']/tbody[@id='jsrSchedGrid']/tr[1]/td[8]") # 제한인원 41
add_subject = "/html/body/div[1]/div[1]/main/section[2]/div[2]/div/table/tbody/tr[1]/td[13]/button" # 수강신청
check = "/html/body/div[2]/section/div/div/div[3]/div/div/ul/li/button" # 수강신청 후 확인
print("현재 제한 인원:",xpath9.text)
print("현재 수강신청인원:",xpath10.text)
print("=" * 25)
if xpath9.text != xpath10.text :
#수강신청 후 종료
driver.find_element_by_xpath(add_subject).click()
# 수강신청 후 확인 버튼 클릭
time.sleep(1)
driver.find_element_by_xpath(check).click()
# 텔레그램 성공메세지
bot.sendMessage(my_user_id, "수강신청 성공했습니다!")
break
반응형
'Etc' 카테고리의 다른 글
[2022.01.26 ~ 29] 면접 준비 1 (0) | 2022.01.26 |
---|---|
[2022.01.20] How to sign up for YouTube Premium Argentina? (0) | 2022.01.20 |
[2021.11.01] How to upload Image on the README.md file? (0) | 2021.11.01 |
[2021.11.01] How to install note program to replace Windows sticker notes? (0) | 2021.11.01 |
[2021.10.30] How to hide recent files and folders on Windows 11? (0) | 2021.10.30 |
댓글