Athony

学校选课登录使用2-python-requests模块
基本内容 使用了requests来访问,pillow得image模块来访问验证码图片 etree用来解析和定位 ...
扫描右侧二维码阅读全文
19
2019/06

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

  • 基本内容
  • 使用了requests来访问,pillow得image模块来访问验证码图片
  • etree用来解析和定位
  • xpath名不虚传
  • 不足得地方是:
    • ocr还没有完成,如果使用光学识别,会方便许多
    • 目前使用手打
  • 分析部分:
  • 06045-38jgutdfjuu.png

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)

12476-l6cgswhkohn.png

2019-7-13 更新:

建议:别用这个格式写,最好建个类来写,方便后面内容的更新还有一致操作的重新利用

最后修改:2019 年 07 月 16 日 11 : 13 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论

1 条评论

  1. wz

© 2018-2019 Copyright   | 浙ICP备18047860号-1| SiteMap