|
|
- import sys
- import time
- import datetime
-
- from selenium import webdriver
- from selenium.webdriver.common.action_chains import ActionChains
- from selenium.webdriver.chrome.options import Options
-
- import smtplib
- from email.mime.text import MIMEText
- from email.header import Header
- from email.utils import formataddr
-
- from pyvirtualdisplay import Display
-
- display = Display(visible=0, size=(800, 800))
- display.start()
-
- if __name__ == "__main__":
-
- #prepare info
- username=sys.argv[1]
- password=sys.argv[2]
- verificationCode="1111"
- area=sys.argv[4]
- email=sys.argv[3]
-
- #login page and num of seats
- if area=='F1_A':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=8&segment=1404341&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=23:50')
- seatsNum=76
- elif area=='F1_B':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=40&segment=1404354&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=23:50')
- seatsNum=150
- elif area=='F1_digital_reading_area':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=7&segment=1404328&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=23:50')
- seatsNum=24
- elif area=='F1_study_area':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=3&segment=1404315&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=23:50')
- seatsNum=48
- elif area=='F3_foreign_books':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=14&segment=1404198&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=66
- elif area=='F3_newspaper':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=13&segment=1404185&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=68
- elif area=='F4_liberal_art_books_A':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=16&segment=1404224&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=72
- elif area=='F4_liberal_art_books_B':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=17&segment=1404237&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=90
- elif area=='F4_liberal_art_books_C':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=18&segment=1404250&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=98
- elif area=='F5_liberal_art_books':
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=20&segment=1404276&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=154
- else:
- url=('http://seats.lib.ecnu.edu.cn/web/seat3?area=22&segment=1404302&day='+datetime.datetime.now().strftime('%Y-%m-%d')
- +'&startTime='+datetime.datetime.now().strftime('%H:%M')+'&endTime=21:55')
- seatsNum=18
-
- options = webdriver.ChromeOptions()
- options.add_argument('--headless')
- options.add_argument('--disable-gpu')
- options.add_argument("--no-sandbox")
- options.add_argument('window-size=1920x3000')
-
- #initiate a explorer object
- window=webdriver.Chrome(executable_path ='/usr/bin/chromedriver',options=options)
- window.get(url)
- time.sleep(3)
-
- #close dialog box
- ActionChains(window).move_by_offset(1, 1).click().perform()
-
-
- #login
- window.find_element_by_xpath('/html/body/div[2]/div[1]/ul/li[6]/a').click()
-
- #input username, password and verification code
- inputUsername=window.find_element_by_name("username")
- inputPassword=window.find_element_by_name("password")
- inputVerificationCode=window.find_element_by_name("verify")
- inputUsername.send_keys(username)
- inputPassword.send_keys(password)
- inputVerificationCode.send_keys(verificationCode)
-
- #click login button
- window.find_element_by_class_name("ui-dialog-autofocus").click()
- time.sleep(2)
- ActionChains(window).move_by_offset(1, 1).click().perform()
- time.sleep(2)
- ActionChains(window).move_by_offset(1, 1).click().perform()
-
- #traverse to book a seat
- flag=0
- timenow=datetime.datetime.now()
- while datetime.datetime.now()<(timenow+datetime.timedelta(hours=1)):
- for i in range(1,seatsNum+1):
- xPath=('//*[@id="floor"]/ul/li['+str(i)+']')
- print(xPath)
- if window.find_element_by_xpath(xPath).get_attribute("class")=='seat ava-icon':
- window.find_element_by_xpath(xPath).click()
- time.sleep(3)
- window.find_element_by_class_name('ui-dialog-autofocus').click()
- flag=1
- break
- if flag == 1:
- break
- window.refresh()
- time.sleep(8)
-
- #notification
- sender='anthonyyoung_ecnu@foxmail.com'
- pwd='cleedzbuzlgrbgba'
- receiver=email
-
- if flag==1:
- msg=MIMEText('您的预定已成功!请到图书馆个人中心查看!','plain','utf-8')
- msg['From']=formataddr(["One-touch Book!",sender])
- msg['To']=formataddr(["",receiver])
- msg['Subject']="已为您保留座位"
- else:
- msg=MIMEText('您的预定超时!','plain','utf-8')
- msg['From']=formataddr(["One-touch Book!",sender])
- msg['To']=formataddr(["",receiver])
- msg['Subject']="预定失败"
- server=smtplib.SMTP_SSL("smtp.qq.com", 465)
- server.login(sender, pwd)
- server.sendmail(sender,[receiver,],msg.as_string())
- server.quit()
|