书犹药也,善读可以医愚;久尝其味,便可心如止水

    

Python实现自动化预约座位

我在写代码时因为着急需要,所以就没有做任何优化,纯属为了实现功能,也没有对应注释,可以自己使用fidder抓包修改对应url下对应需要提交的post值即可

image.png

功能:

1、设置时间点自动预约座位

2、设置时间点自动签到座位

3、设置时间点自动归还座位


适用的学校:

四川大学图书馆 

甘肃政法学院 

对外经济贸易大学 

成都理工大学 

陇南师专 

天水师范学院 

山东中医药大学图书馆 

成都中医药大学 

陕西中医药大学 

沈阳工业大学


原理

1、预约时需要链接增加的一个加盐的sign值,这个值在每个小时变化一次,因为这个加密在js脚本里面,所以我就直接向系统提交并给我返回正确的sign值,如果有兴趣的可以自己去试试找出js脚本中的sign加密函数 


代码如下:

1、GetKey.py:向服务器获取可用时间后执行座位预约脚本

#!/usr/bin/python
#-*- coding: utf-8 -*-
import requests
import json
from requests.exceptions import RequestException
import os 
'''以天水师范学院为例 '''

'''全部参数预设'''
#用户名和密码
login_user       = ''
login_passwd     = ''
#获取sign签名
beskids          = '20'
roomid           = '19'
#提交时间认证
id_time          = '19'
#阅览室列表查询
beskid_1         = '20'
#查询表单
roomno           = '19'
isuseday         = '1'
begintime        = '07:59:59'
endtime          = '22:00:00',
beskid_2         = '20',
beskCanId        = '20',
#提交表单
tableid          = 1396
tableno          = '七楼-034' 
'''全部参数设置完毕'''

'''登录系统'''
'''下面的URL链接需要自行修改'''
url_login ='http://tsgzwyy.tsnu.edu.cn:8060/login'
login_form = {
        'user':login_user,
        'passwd':login_passwd,
    }

cookies = ''
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Content-Length': '30',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Cookie': cookies,
    'DNT': '1',
    'Host': 'tsgzwyy.tsnu.edu.cn:8060',
    'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/unlogin',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36',
    }

session = requests.Session()
resp_login = session.post(url_login, headers=headers,data=login_form)
resp_login = session.get(url_login)
cookie_str = session.cookies.get_dict()
cookies = 'JSESSIONID=' + cookie_str['JSESSIONID']
'''登录完成'''
     
     
'''向服务器提交时间认证表单信息'''

url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/checktimecanbesk'
headers = {
    'Host': 'tsgzwyy.tsnu.edu.cn:8060',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding': 'gzip, deflate',
    'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/selectreadingroom',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Length': '5',
    'Connection': 'keep-alive',
    'Cookie': cookies,
    }
    
form_checktime = {
    'id' : id_time                                    
    }
while True:
    response = requests.post(url,headers=headers,data=form_checktime)
    ReturnValue = json.loads(response.text)["ReturnValue"]
    if ReturnValue == 0:
    	#认证成功,开始执行预约座位的脚本,自行修改脚本位置
        os.system('python3 /www/Library/Seat.py')
        print("The Time is Ture,Plan is start!")
        break 
    else:
        response = requests.post(url,headers=headers,data=form_checktime)
        ReturnValue = json.loads(response.text)["ReturnValue"]
        print(ReturnValue)


2、Seat.py:自动执行的座位预约的代码


#!/usr/bin/python
#-*- coding: utf-8 -*-
import requests
import json
from requests.exceptions import RequestException
import os 
'''以天水师范学院为例'''
'''全部参数预设'''
#用户名和密码
login_user       = ''
login_passwd     = ''
#获取sign签名
beskids          = '20'
roomid           = '19'
#提交时间认证
id_time          = '19'
#阅览室列表查询
beskid_1         = '20'
#查询表单
roomno           = '19'
isuseday         = '1'
begintime        = '07:59:59'
endtime          = '22:00:00',
beskid_2         = '20',
beskCanId        = '20',
#提交表单
tableid          = 1396
tableno          = '七楼-034' 
'''全部参数设置完毕'''
file = open (r'/www/Library/LogEmail.txt','w')
'''登录系统'''
url_login ='http://tsgzwyy.tsnu.edu.cn:8060/login'
login_form = {
        'user':login_user,
        'passwd':login_passwd,
    }
cookies = ''
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Content-Length': '30',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Cookie': cookies,
    'DNT': '1',
    'Host': 'tsgzwyy.tsnu.edu.cn:8060',
    'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/unlogin',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36',
    }
session = requests.Session()
resp_login = session.post(url_login, headers=headers,data=login_form)
resp_login = session.get(url_login)
cookie_str = session.cookies.get_dict()
cookies = 'JSESSIONID=' + cookie_str['JSESSIONID']
print('获取到的cookies值为:' + cookies)
'''登录完成'''
     
     
'''向服务器提交时间认证表单信息'''
def url_checktime():
    url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/checktimecanbesk'
    headers = {
        'Host': 'tsgzwyy.tsnu.edu.cn:8060',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/selectreadingroom',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Length': '5',
        'Connection': 'keep-alive',
        'Cookie': cookies,
        }
    
    form_checktime = {
        'id' : id_time                                    
        }
    try:
        response = requests.post(url,headers=headers,data=form_checktime)
        if response.status_code == 200:
            return(response.text)
        else:
            return "时间校验失败"
    except RequestException as E:
        print(E)
        return 'Except_Error_url_checktime'
       
print('时间校验成功并已返回: '  + url_checktime())
'''获取sign签名'''
def get_data():
    url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/getbesktimelist'
#根据阅览室编号获取sign值,如下是七楼大厅的beskids和roomid
    data = {
        'roomid' : roomid,
        'beskids' : beskids,
        }
    try:
        response = requests.post(url,data=data)
        if response.status_code == 200:
            #print('获取sign到的JSON为: ' +  response.text)
            return(response.text)
        else:
            print("sign获取失败")
            return None
    except RequestException as E:
        print(E)
        print("Except_Error_get_data")
        return None 
     
json_sign = json.loads(get_data())
sign = (json_sign['Data'][0]['sign'])
print('获取到该小时内的sign值为: ' + sign)  
 
 
 
'''阅览室列表数据获取'''
def url_getbeskusedaylist():
    url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/getbeskusedaylist'
    headers = {
        'Host': 'tsgzwyy.tsnu.edu.cn:8060',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/selectreadingroom',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Length': '9',
        'Connection': 'keep-alive',
        'Cookie': cookies,
        }
    form_getbeskusedaylist = {
        'beskid' : beskid_1
        }
    try:
        response = requests.post(url,headers=headers,data=form_getbeskusedaylist)
        if response.status_code == 200:
            return(response.text)
        else:
            return "获取使用列表失败"
    except RequestException as E:
        print(E)
        return 'Except_Error_url_getbeskusedaylist'
     
print('阅览室列表校验成功并已返回: ' + url_getbeskusedaylist())
 
 
''' 查询表单 '''
url_readingroomtablelist_url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroomtablelist'
headers = {
        'Host': 'tsgzwyy.tsnu.edu.cn:8060',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/selectreadingroom',        
        'Connection': 'keep-alive',
        'Cookie': cookies,
        'Upgrade-Insecure-Requests': '1',
        'Cache-Control': 'max-age=0',
        }
form_readingroomtablelist={
        'roomno':roomno,
        'isuseday':isuseday,
        'begintime':begintime,
        'endtime':endtime,
        'beskid':beskid_2,
        'beskCanId':beskCanId,
        'sign':sign,                                  
        }
response = requests.get(url_readingroomtablelist_url,headers=headers,params=form_readingroomtablelist)
print(response)
s = '准备预约的座位是:'+  tableno+ '号'
print (s,file = file)
# '''提交座位数据'''
def url_postbeskdata():
    global tableid
    mintableid   = tableid-4
    
    url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/postbeskdata'    
    headers = {
        'Host': 'tsgzwyy.tsnu.edu.cn:8060',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'keep-alive',
        'Content-Length': '114',
        'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
        'X-Requested-With': 'XMLHttpRequest',
        'DNT': '1',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/readingroomtablelist?roomno=19&isuseday=1&begintime=07:59:59&endtime=22:00:00&beskid=20&beskCanId=20&sign=' + sign,
        'Cookie': 'SL_G_WPT_TO=zh; SL_GWPT_Show_Hide_tmp=1; SL_wptGlobTipTmp=1; ' + cookies,
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        }    
    form_postbeskdata = {
        'roomno':roomno,
        'tableid':str(tableid),
        'tableno':tableno,
        'begintime':begintime,
        'endtime':endtime,
        'beskid':beskid_2,
        'beskCanId':beskCanId,
        }
    response = requests.post(url,headers=headers,data=form_postbeskdata)
    ReturnValue =json.loads(response.text)["ReturnValue"]
    Reason = json.loads(response.text)["Msg"]
    new_tableno = 34 
    s =  tableno+ '号预约已提交,状态为:' + Reason 
    print (s,file = file)
    while True:
        if ReturnValue == 0:
            return Reason
            break
        
        elif ReturnValue == -1:
            #楼层不变,座位号减1
            
            tableid -= 1
            new_tableno -= 1
            
            newtableno   = str('七楼-0' + str(new_tableno))
            oldtableno   = str('七楼-0' + str(new_tableno-1)) 
            
            s = newtableno+ '号预约失败,Reason: ' + Reason + ',尝试预约: '  + oldtableno
            print (s,file = file)
            #如果座位号小于设定的座位号,则继续执行座位号加1,继续提交表单
            if tableid >= mintableid:
                form_new_postbeskdata = {
                    'roomno':roomno,
                    'tableid':str(tableid),
                    'tableno':newtableno,
                    'begintime':begintime,
                    'endtime':endtime,
                    'beskid':beskid_2,
                    'beskCanId':beskCanId,
                    }
                response = requests.post(url,headers=headers,data=form_new_postbeskdata)
                ReturnValue =json.loads(response.text)["ReturnValue"]
               
            else:
                return "没机会了!洗洗睡吧!"
                
        else:
            return "2号循环体出错,请检查脚本"
            
    else:
        return "1号循环体出错,请检查脚本"
        
s = str(url_postbeskdata())
print(s,file = file)
file.close()       
os.system('python3  /www/Library/SendEmail.py')


第二步:座位签到


#!/usr/bin/python
#-*- coding: utf-8 -*-
import requests
import json
import os 
'''以天水师范学院为例'''
'''全部参数预设'''
#用户名和密码
login_user       = ''
login_passwd     = ''
tableid          = 1396
tableno          = '七楼-034' 
'''全部参数设置完毕'''
file = open (r'/www/Library/LogEmail.txt','w')
'''登录系统'''
url_login ='http://tsgzwyy.tsnu.edu.cn:8060/login'
login_form = {
        'user':login_user,
        'passwd':login_passwd,
    }
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Content-Length': '30',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Cookie':'',
    'DNT': '1',
    'Host': 'tsgzwyy.tsnu.edu.cn:8060',
    'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/unlogin',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36',
    }
session = requests.Session()
resp_login = session.post(url_login, headers=headers,data=login_form)
resp_login = session.get(url_login)
cookie_str = session.cookies.get_dict()
cookies = 'JSESSIONID=' + cookie_str['JSESSIONID']
print('获取到的cookies值为:' + cookies)
'''登录完成'''
 
def url_postbeskdata():
    global tableid
    mintableid   = tableid-5
    
    url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/beskdatasign'    
    headers = {
        'Host': 'tsgzwyy.tsnu.edu.cn:8060',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'keep-alive',
        'Content-Length': '114',
        'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
        'X-Requested-With': 'XMLHttpRequest',
        'DNT': '1',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Cookie':cookies,
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        }    
    form_postbeskdata = {
        'tableno':tableno,
        }
    response = requests.post(url,headers=headers,data=form_postbeskdata)
    ReturnValue =json.loads(response.text)["ReturnValue"]
    Reason = json.loads(response.text)["Msg"]
    new_tableno = 34 
    s =  tableno+ '号签到已提交,Reason  :' + Reason 
    print (s,file = file)
    while True:
        if ReturnValue == 0:
            return Reason
            break
        
        elif ReturnValue == -1:         
            tableid -= 1          
            new_tableno -= 1           
            newtableno   = str('七楼-0' + str(new_tableno))
            
            #如果座位号小于设定的座位号,则继续执行座位号加1,继续提交表单
            if tableid >= mintableid:
                form_new_postbeskdata = {
                    'tableno':newtableno,
                    }
                response = requests.post(url,headers=headers,data=form_new_postbeskdata)
                ReturnValue =json.loads(response.text)["ReturnValue"]
                Msg =json.loads(response.text)["Msg"]
                s = newtableno+ '号签到已提交,Massage:' + Msg
                if ReturnValue == 0:
                    print (s,file = file) 
                    break
                else:
                    continue      
            else:
                return "签到未成功,自己抓紧时间签个到,还来得及^_^"
                
        else:
            return "2号循环体出错,请调试脚本"
            
    else:
        return "1号循环体出错,请调试参数"
        
     
s = str(url_postbeskdata())
print(s,file = file)
file.close()       
os.system('python3  /www/Library/SendEmail.py')


第三步:ReturnTable.py签退

#!/usr/bin/python
#-*- coding: utf-8 -*-
import requests
import json
from requests.exceptions import RequestException
import os
'''以天水师范学院为例'''
'''全部参数预设'''
#用户名和密码
login_user       = ''
login_passwd     = ''
#获取sign签名
beskids          = '20'
roomid           = '19'
#提交时间认证
id_time          = '19'
#阅览室列表查询
beskid_1         = '20'
#查询表单
roomno           = '19'
isuseday         = '1'
begintime        = '07:59:59'
endtime          = '22:00:00',
beskid_2         = '20',
beskCanId        = '20',
#提交表单
tableid          = 1395
tableno          = '七楼-034' 
'''全部参数设置完毕'''
#文件位置自行修改,最好绝对路径
file = open (r'/www/Library/LogEmail.txt','w')
'''登录系统'''
url_login ='http://tsgzwyy.tsnu.edu.cn:8060/login'
login_form = {
        'user':login_user,
        'passwd':login_passwd,
    }
cookies = ''
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Content-Length': '30',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Cookie': cookies,
    'DNT': '1',
    'Host': 'tsgzwyy.tsnu.edu.cn:8060',
    'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/unlogin',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36',
    }
session = requests.Session()
resp_login = session.post(url_login, headers=headers,data=login_form)
resp_login = session.get(url_login)
cookie_str = session.cookies.get_dict()
cookies = 'JSESSIONID=' + cookie_str['JSESSIONID']
print('获取到的cookies值为:' + cookies)
'''登录完成'''
 
 
     
     
'''向服务器提交时间认证表单信息'''
def url_returntable():
    url = 'http://tsgzwyy.tsnu.edu.cn:8060/readingroom/returntable'
    headers = {
        'Host': 'tsgzwyy.tsnu.edu.cn:8060',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Accept-Encoding': 'gzip, deflate',
        'Referer': 'http://tsgzwyy.tsnu.edu.cn:8060/readingroommanage?url=readingroommanage',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Origin': 'http://tsgzwyy.tsnu.edu.cn:8060',
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Length': '0',
        'Connection': 'keep-alive',
        'Cookie': cookies,
        }
    
    try:
        response = requests.post(url,headers=headers)
        ReturnValue =json.loads(response.text)["Msg"]
        
        if ReturnValue == 0:
            return ReturnValue
        
        else: 
            return ReturnValue
    except RequestException as E:
        print(E)
        return 'Except_Error_url_checktime'
       
s = '座位签退已提交并已返回: '  + url_returntable()
print(s,file = file)
file.close()       
os.system('python3  /www/Library/SendEmail.py')


附加:SendEmail.py 每一步执行完毕后邮件提醒

#!/usr/bin/python
#coding=utf-8
import smtplib
from email.mime.text import MIMEText
import string
'''以天水师范学院为例  发件邮箱设置'''
host="smtp.exmail.qq.com" 
sender=''
spass=''
#收件人邮箱,可多人
recevier=['aaa@cc.com','aba@cc.com']
f = open("/www/Library/LogEmail.txt",'r',encoding='utf-8')
msg = ''' '''
while True:
    line = f.readline()
    msg += line.strip()+'\n'
    if not line:
        break
f.close()
msg=MIMEText(msg,'plain','utf-8')
msg['From']="座位管理员"
msg['To']=','.join(recevier)
msg['Subject']="图书馆座位预约日志"
try:
server=smtplib.SMTP("smtp.exmail.qq.com")
server.login(sender,spass)
server.sendmail(sender,recevier,msg.as_string())
server.quit()
print("邮件发送成功")
except smtplib.SMTPException:
print("邮件发送失败")


最后把脚本加入计划任务即可

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

添加新评论

icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif

  关于博主

既见君子,云胡不喜,浅喜如苍狗,深爱似长风

  近期评论

  •  Admin: 对,将4项全部复制粘贴进去就可以用,如果连不上就可能是这个节点挂了 你尝试换其他的试试,如果都...
  •  明: 是直接复制过去就可以用了吗?
  •  卡杜:
  •  YJLAugus: 博主你好~我是在gayhub上找到你的!是因为那么图书馆预约的python脚本..我不是很懂p...
  •  404not: free-ss.site 这个网访问不了啊。

  分类目录

很多东西宁缺毋滥,流星的光芒短暂而灼热闪耀。

让你变得更好的那个人,往往是你觉得很难与之相处的那个人。—— by 小宇

觉得自己做的到和不做的到,其实只在一念之间。

路在自己脚下,没有人可以决定我的方向。

你的选择是做或不做,但不做就永远不会有机会。

凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。