到了期末考完试,发现了微信以前的那个西邮在线小程序不能直接查成绩了,要查成绩需要登录官网,点击成绩查询才可以看到成绩,因此我使用python爬虫制作了一个学校网站个人成绩的爬虫,我们学校的网站确实还是有点东西的,反爬做的很好,把重要的信息的源代码都隐藏了起来,但是经过我一下午的实践,终于还是搞出来了,我的思路是:
1.首先使用selenium模拟登陆
2.使用规则找到查询按键对应的路径
3.使用模拟鼠标点击功能进行点击查询
4.成绩出来以后,因为代码看不到,没法把信息爬取出来,因此我使用了selenium的截图功能,对成绩进行了截图保存(核心步骤)
5.使用tkinter只做了一个简单界面,可以实现登录,显示成绩截图功能
6.使用pyinstaller进行打包,这样发给同学们就能直接用了
经过我以上的步骤,学校官网的信息就能爬取出来了
https://github.com/Spider-Man123/xiyou-Final-Results-Spider
一:上代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import tkinter as tk
import random
def chaxun():#模拟登陆,登陆后进行点击查询
m=link.get()
n=link2.get()
url='http://www.zfjw.xupt.edu.cn/jwglxt/cjcx/cjcx_cxDgXscj.html?gnmkdm=N305005&layout=default&su={}'.format('m')
chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)
browser .get(url)
input=browser .find_element_by_xpath('//*[@id="yhm"]')
input.send_keys(m)
input1=browser .find_element_by_xpath('//*[@id="mm"]')
input1.send_keys(n)
m1=browser .find_element_by_xpath('//*[@id="dl"]')
m1.click()
r=browser .find_element_by_xpath('//*[@id="search_go"]')
r.click()
time.sleep(3)
#随机生成一个数字,进行对图片的保存
a = random.choice([1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30])
p=a
#找到所需信息路径进行截图
browser.find_element_by_xpath('//*[@id="gbox_tabGrid"]').screenshot('chengji{}.png'.format(p))
window.destroy()
top = tk.Tk()
top.title('spider-man.西安邮电大学成绩查询')
top.geometry('700x500')
canva = tk.Canvas(top,height=500,width=700)
image_files = tk.PhotoImage(file='chengji{}.png'.format(p))
canva.create_image(0, 0, anchor='nw',image=image_files)
canva.pack()
top.mainloop()
window=tk.Tk()
window.title('spider-man.西安邮电大学成绩查询')
window.geometry ('400x500')
canvas=tk.Canvas(window,bg='blue',height=135,width=190)
image_file=tk.PhotoImage (file='1.png')
canvas .create_image(0,0,anchor='nw',image=image_file)
canvas .pack()
l=tk.Label (window,text='请输入账号',bg='yellow',font=('Calibri',25),width=10,height=2)
l.pack()
link= tk.Entry(window,width=20)
link.pack()
l2=tk.Label (window,text='请输入密码',bg='yellow',font=('Calibri',25),width=10,height=2)
l2.pack()
link2=tk.Entry(window,width=20,show='*')
link2.pack()
b=tk.Button (window,text='查询',bg='orange',font=('Calibri',25),width=10,height=1,command=chaxun)
b.pack()
c=tk.Label(window,text='出现BUG加我QQ:1220785153',font=('黑体,10'),width=30,height=2)
c.pack()
window.mainloop()
二:结果展示
1.输入账号和密码进行登录
2.点击查询得到结果
三:打包的EXE程序可以直接下载使用
现在完后电脑需要有 Google Chrome 和相对应的驱动,因为使用到了selenium这个库,需要调用浏览器打开网页
我把一个驱动载文件里面放着,对应的谷歌版本是
版本 75.0.3770.142(正式版本) (64 位)
链接:https://pan.baidu.com/s/1ojDFIIXJNznyAfMXHRatlg
提取码:gqmy