学校选课登录使用2-python-requests模块

6 篇文章 1 订阅
5 篇文章 0 订阅
  • 基本内容

  • 使用了requests来访问,pillow得image模块来访问验证码图片

  • etree用来解析和定位

  • xpath名不虚传

  • 不足得地方是:

    • ocr还没有完成,如果使用光学识别,会方便许多
    • 目前使用手打
  • 分析部分:

  • 在这里插入图片描述

import requests
import urllib
import pytesseract
from PIL import Image
from lxml import etree
def get_view_state(response):
    # 用Lxml库解析网页,通过Xpath语法定位__VIEWSTATE
    selector = etree.HTML(response.content)
    __VIEWSTATE = selector.xpath('//*[@id="form1"]/input/@value')[0]
    return  __VIEWSTATE

def login_status(response):
    if response.status_code == requests.codes.ok:
        selector = etree.HTML(response.text)
        state = selector.xpath('/html/head/title/text()')[0]
        if state == "正方教务管理系统":
            print("登录成功")
            return True
        elif state == "欢迎使用正方教务管理系统!请登录":
            print("登录失败")
            return False
    else:
        print(response.status_code)
        print("登录失败")
        return False
if __name__ == "__main__":

    url = "http://xk.zucc.edu.cn/default2.aspx"#学校得登录界面
    codeurl="http://xk.zucc.edu.cn/CheckCode.aspx?"#验证码界面
    reponseurl="http://xk.zucc.edu.cn/xs_main.aspx?xh=xxxxxxx"#选课时需要用到的frderence

    sess = requests.session()#使用session()管理得话使用的是同一个cookie
    data={
        '__VIEWSTATE':'',
        'txtUserName': 'xxxxx',#学号
        'Textbox1':'', 
        'TextBox2': 'xxxxx',#密码
        'RadioButtonList1': '学生'.encode('gb2312'),#说明为学生身份,编码格式改一下,没有改得话就是那一串乱码
        'Button1': '',
        'lbLanguage': '',
        'hidPdrs': '',
        'hidsc': ''
    }

    headers={
        'Content-Length': str(len(data)),
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
        'Referer': url,
        #'Cookie':'AntiLeech=2671741908; ASP.NET_SessionId=idIc9sa-zoS19kz5-uztOef66inN0cD1WmDgTbjaSYQpHcCjJF4*',
        
    }


    valcode = sess.get(codeurl,stream=True)
    f = open('valcode.jpg','wb')
    f.write(valcode.content)
    f.close()
    
    
    res1  = sess.get(url,headers=headers)
    viewstate = str(get_view_state(res1))
    data['__VIEWSTATE'] = str(viewstate)
    

    img = Image.open('valcode.jpg')
    img.show()
    data['txtSecretCode']=str(input())

    res =  sess.post(url,data=data,headers=headers)
    login_status(res)
    #print(res)
    

在这里插入图片描述

两天之后:
博主想要说一句,千万别学博主用这个格式写,最好建个类来写,方便后面选课的书写
公选课在博主的个人博客上:添加链接描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值