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