Cloud Computing Course
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

143 linhas
6.0 KiB

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()