prince_cool 发表于 2021-8-27 17:05

紧跟时事,自己制作四六级查分小工具

本帖最后由 prince_cool 于 2021-8-28 17:24 编辑

最近在假期重拾了python,学习了爬虫和图形化界面库tkinter,想着最近也要四六级查分了,就看看能不能自己写一个这样的小工具吧。
首先、打开查分网页

按F12,打开开发者工具,填入信息获取响应

(发现并没有什么cookie,token验证,发现是普通地提交参数获得请求)
(km:查询的科目,e:不用修改,xm:姓名,no:身份证号或准考证号,v不填)
查看一下响应

(因为是错误信息,当然返回的响应是错误的提示)
接下来输入我自己的正确信息(已做处理)

获得相应的正确内容

(裸考没想到过了,哈哈哈哈哈哈)
数据都有了,我们开始编写程序吧!
用到了request,tkinter和json库
下面是做好后的界面,毕竟第一次做这种,排版什么的都不太好,多多见谅

因为分析写代码什么的都比较简单,我就直接把代码放在下面了,可以直接打包或者修改代码,做的更好看,有不懂的地方可以留言交流,感谢

import tkinter.messagebox
import requests
import json
from tkinter import *
from tkinter import ttk

def get_data():
    try:
      kmlist={
            '全国大学英语四级考试(CET4)':'1',
            '全国大学英语六级考试(CET6)':'2',
            '全国大学日语四级考试(CJT4)':'3',
            '全国大学日语六级考试(CJT6)':'4',
            '全国大学德语四级考试(PHS4)':'5',
            '全国大学德语六级考试(PHS6)':'6',
            '全国大学俄语四级考试(CRT4)':'7',
            '全国大学俄语六级考试(CRT6)':'8',
            '全国大学法语四级考试(TFU4)':'9'
      }
      url='http://cachecloud.neea.cn/api/latest/results/cet'
      headers={
            'Host': 'cachecloud.neea.cn',
            'Origin': 'http://cet.neea.cn',
            'Referer': 'http://cet.neea.cn/',
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
      }
      km=com.get()
      name=entry1.get()
      id=entry2.get()
      params={
            'e': 'CET_202106_DANGCI',
            'km': kmlist,
            'xm': name,
            'no': id
      }
      response=requests.get(url,headers=headers,params=params)
      data=json.loads(response.content.decode())
      if data['code']!=404:
            datalist={
                '姓名':data['xm'],
                '准考证号':data['zkzh'],
                '总分':data['score'],
                '听力':data['sco_lc'],
                '阅读':data['sco_rd'],
                '写作和翻译':data['sco_wt']
            }
            for i in datalist:
                text.insert(END,'{}:{}'.format(i , datalist))
                text.see(END)
                text.update()
            if int(data['score'])>=425:
                tkinter.messagebox.showinfo(message='恭喜你,通过考试啦,么么哒!!!👍')
            if int(data['score'])<425:
                tkinter.messagebox.showinfo(message='很遗憾,你没通过考试哦,继续加油!!!&#129470;')
      else:
            text.insert(END,data['msg'])
    except:
      tkinter.messagebox.showerror(message='请登录后再点击,谢谢')

window=Tk()
window.title('四六级成绩查询')
screenwidth = window.winfo_screenwidth()# 屏幕宽度
screenheight = window.winfo_screenheight()# 屏幕高度
width = 1000
height = 500
x = int((screenwidth - width) / 2)
y = int((screenheight - height) / 2)
window.geometry('{}x{}+{}+{}'.format(width, height, x, y))# 大小以及位置

#查询科目下拉菜单
com=ttk.Combobox(window,width=30)
com.pack()
com['value']=('全国大学英语四级考试(CET4)','全国大学英语六级考试(CET6)','全国大学日语四级考试(CJT4)','全国大学日语六级考试(CJT6)','全国大学德语四级考试(PHS4)','全国大学德语六级考试(PHS6)','全国大学俄语四级考试(CRT4)','全国大学俄语六级考试(CRT6)','全国大学法语四级考试(TFU4)')
com.current(0)

#输入框
frm1=Frame(window,height=150,width=100)
l1=Label(frm1,text='姓名:',font=('宋体',20))
l1.grid()
l2=Label(frm1,text='身份证或准考证号:',font=('宋体',20))
l2.grid(row=1) #网格布局
entry1=Entry(frm1,font=('宋体',20))
entry1.grid(row=0,column=1)
entry2=Entry(frm1,font=('宋体',20))
entry2.grid(row=1,column=1)
frm1.pack()
#结果框
frm2=Frame(window,height=350,width=800)
sc=Scrollbar(frm2)
sc.pack(side=RIGHT,fill=Y)
text=Listbox(frm2,font=('宋体',20),width=50,yscrollcommand=sc.set)
text.pack(side=LEFT,fill=BOTH,expand=False)
sc.config(command=text.yview)
frm2.pack()
#查询按钮
frm3=Frame(window,height=50,bg='green',width=100)
button1=Button(frm3,text='登录',command=get_data)
button1.pack()
frm3.pack()
window.mainloop()





众人心欢i 发表于 2021-8-27 17:09

我觉得就剩你没查了

Onlooker. 发表于 2021-8-28 14:01

prince_cool 发表于 2021-8-27 22:23
什么问题,可以上图看看是什么bug,欢迎互相交流

代码问题出现在这个地方
            for i in datalist:
                text.insert(END,'{}:{}'.format(i,datalist))
                text.see(END)
                text.update()

不是很懂Python,只能大概看出问题应该是这里,可能说的不对




prince_cool 发表于 2021-8-27 17:25

众人心欢i 发表于 2021-8-27 17:09
我觉得就剩你没查了

昨天就写好程序了,今天想着要不要发个贴,然后就发了,哈哈哈哈

Onlooker. 发表于 2021-8-27 18:26

显示结果有问题

hhdhxb 发表于 2021-8-27 20:52

牛啊大佬

hhdhxb 发表于 2021-8-27 20:54

这两天我去试一下代码

yaoliu 发表于 2021-8-27 21:12

这个可以有,方便

璐璐诺 发表于 2021-8-27 21:24

不错呀 支持原创 互相学习~~

prince_cool 发表于 2021-8-27 22:23

Onlooker. 发表于 2021-8-27 18:26
显示结果有问题

什么问题,可以上图看看是什么bug,欢迎互相交流

正己 发表于 2021-8-27 22:36

建议代码用代码块包起来,方便阅读
页: [1] 2
查看完整版本: 紧跟时事,自己制作四六级查分小工具