欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常熟理工学院内网打卡查询代码

程序员文章站 2022-05-04 11:49:50
...

打卡查询

代码

import requests
import http.cookiejar
import urllib
from bs4 import BeautifulSoup
import os

def search(username):
    url = "http://10.28.102.51/student/checkUser.jsp?userName=%s&passwd=%s" % (username, username)
    req=urllib.request.Request(url)
    cj=http.cookiejar.CookieJar()
    opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
    r=opener.open(req)

    get_url="http://10.28.102.51/student/queryExerInfo.jsp"
    get_request=urllib.request.Request(get_url)
    get_response=opener.open(get_request)
    data=get_response.read()
    soup=BeautifulSoup(data,"html.parser")
    table=soup.find_all("table",attrs={"class":False,"border":"0","cellpadding":"0","cellspacing":"0","width":"100%"})[1]
    tr=table.find_all("tr")[2]

    kind=tr.find_all("td")[1]
    tds=kind.find_all("td")

    datas={}
    datas["早操"]=tds[2].getText().split(" ")[0].split("\xa0")[1]

    datas["体育俱乐部考勤"]=tds[4].getText().split(" ")[0].split("\xa0")[1]

    datas["引体向上考勤"]=tds[6].getText().split(" ")[0].split("\xa0")[1]

    datas["篮球比赛"]=tds[8].getText().split(" ")[0].split("\xa0")[1]

    datas["田径"]=tds[10].getText().split(" ")[0].split("\xa0")[1]

    datas["运动会单项"]=tds[12].getText().split(" ")[0].split("\xa0")[1]

    datas["竞赛管理"]=tds[14].getText().split(" ")[0].split("\xa0")[1]

    datas["考勤4"]=tds[16].getText().split(" ")[0].split("\xa0")[1]

    datas["考勤5"]=tds[18].getText().split(" ")[0].split("\xa0")[1]

    datas["增加次数"]=tds[20].getText().split(" ")[0].split("\xa0")[1]

    datas["共打卡"]=0;
    for value in datas.values():
        datas["共打卡"]+=int(value)
    datas["共打卡"]/=2
    datas["共打卡"]=int(datas["共打卡"])
    return datas

if __name__=="__main__":
    print("请输入学号:")
    username=input()
    print("正在查询……")
    datas=search(username)
    for key in datas.keys():
        print(key+":"+str(datas[key])+"次")
    print("查询结束")
    input()

程序思路

分析网页

[1.打卡查询登录页面]
[2.登录后跳转的页面]
[3.实际打卡信息页面]

页面1是登录页面,登录成功后跳转到页面2,然后点击查看体锻信息跳转到页面3。我们想获取打卡数据首先得通过登录页面到达实际打卡信息页面。所以我们就得获得登录后的cookie,用来唯一标识用户身份。再利用该cookie直接请求第三个页面。

实际操作:

  • 发送request登录请求
  • 获取response返回cookie
  • 创建新的request请求赋予得到的cookie
  • 分析再次返回的response数据,获取自己想要的数据