Lufer

  • 首页
  • 编程
  • 学习笔记
  • 日常折腾
Lufer
Code the World
  1. 首页
  2. 编程
  3. Python
  4. 正文

考研成绩自动查询脚本

2019年2月16日 54点热度 0人点赞 0条评论

  自动检索学校列表里有没有指定学校,如果有的话则自动查询成绩,并将结果发送到指定邮箱。

  有个小BUG就是最后邮件会发两次。

  基于Python2.7,Python3的urllib可能用法有所不同。

  先检索是否有指定学校:

#构造请求url,需要用地区编号+时间戳,地区编号可以在浏览器F12中查看,例如北京是11
url='https://yz.chsi.com.cn/apply/code/cjcxdw.do?ssdm=11&ts='+str(int(round(time.time() * 1000)))
#请求头注意Host和Referer
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Host': 'yz.chsi.com.cn',
'Accept-Language': 'zh-CN,zh;q=0.9',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
'Connection': 'keep-alive',
'Accept-Encoding': 'gzip, deflate, br',
'Cookie': cookie,
'Referer': 'https://yz.chsi.com.cn/apply/cjcx/',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'Cache-Control': 'no-cache'
}
#发送请求,获取返回列表
req = urllib2.Request(url, None, headers)
response = urllib2.urlopen(req)
res = response.read()
#格式化为json对象,获取其中的dms,即学校列表
jsonobj=json.loads(res)
schoolist=jsonobj['dms']
flag=0
#遍历列表,查找是否有北航
for i in schoolist:
schoolname=i['mc']
if schoolname.encode('utf-8') == '北京航空航天大学':
flag=1
schoolcode=i['dm']

  查到之后构造数据发送POST请求获取结果,转发邮件,不单列了。

全部代码

#coding=utf-8

import urllib2
import urllib
import threading
import time
import json
import smtplib
import gzip
import StringIO
from email.mime.text import MIMEText
from email.header import Header


cookie='JSESSIONID=D5B7900FBCE661659978464309BD23D1; acw_tc=2760824b15502052244788631e101590a210f068338831246151b55dcc5577; JSESSIONID=5BB2C7ADAFD3F24E7179F7E0571B3606; _ga=GA1.4.129029864.1550205225; _gid=GA1.4.1924511835.1550205225'
mail_host = "smtp.163.com" # 设置服务器
mail_user = "********@163.com" # 用户名
mail_pass = "*********" # 密码

sender = '*********@163.com' #发件人邮箱
receivers = ['********@163.com'] # 收件人邮箱,可以是个列表




def fetch2(url,post):
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Host': 'yz.chsi.com.cn',
'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',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
'Connection': 'keep-alive',
'Accept-Encoding': 'gzip,deflate',
'Cookie': cookie,
'Referer': 'https://yz.chsi.com.cn/apply/cjcx/',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'Cache-Control':'no-cache'
}
data = urllib.urlencode(post)
req = urllib2.Request(url, data,headers)
response = urllib2.urlopen(req)
page_source = response.read()
return page_source

def mainfunc():
url='https://yz.chsi.com.cn/apply/code/cjcxdw.do?ssdm=11&ts='+str(int(round(time.time() * 1000)))
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Host': 'yz.chsi.com.cn',
'Accept-Language': 'zh-CN,zh;q=0.9',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
'Connection': 'keep-alive',
'Accept-Encoding': 'gzip, deflate, br',
'Cookie': cookie,
'Referer': 'https://yz.chsi.com.cn/apply/cjcx/',
'Pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'Cache-Control': 'no-cache'
}

print("开始查询!")
try:
req = urllib2.Request(url, None, headers)
response = urllib2.urlopen(req)
res = response.read()
jsonobj=json.loads(res)
schoolist=jsonobj['dms']
flag=0
#设置默认学校代码,可以随便填
schoolcode=10050
global timer
#查找是否有北航
for i in schoolist:
schoolname=i['mc']
if schoolname.encode('utf-8') == '北京航空航天大学':
flag=1
schoolcode=i['dm']
#查到之后构造查询参数
if(flag==1):
url2 = 'https://yz.chsi.com.cn/apply/cjcx/cjcx.do'
post = {'xm': '张三', 'zjhm':'身份证号', 'ksbh': '', 'bkdwdm': schoolcode, 'checkcode': ''}
re = fetch2(url2, post)
#解压收到的gzip网页
re = StringIO.StringIO(re)
gz = gzip.GzipFile(fileobj=re)
re = gz.read()
gz.close()
#构造邮件消息,发送HTML类型邮件
message = MIMEText(re, _subtype='html',_charset='utf-8')
message['From'] = "lufer<*********@163.com>" #发件人姓名
message['To'] = "Receiver" #收件人姓名
subject = '出分了!' #邮件主题
message['Subject'] = Header(subject, 'utf-8')
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print "已查询到成绩j,邮件发送成功"
smtpObj.quit()
timer.cancel()
return
else:
print("没有查询到制定学校")
except Exception as e:
print('发生了异常:', e)
#一分钟查询一次
timer = threading.Timer(60, mainfunc)
timer.start()

mainfunc()

查分邮件

标签: Python 查询脚本
最后更新:2021年12月22日

Lufer

新的一天开始啦

点赞
< 上一篇
下一篇 >

文章评论

取消回复

文章目录
  • 全部代码
  • 查分邮件

COPYRIGHT © 2022 lufer.cc.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021045819号