zoukankan      html  css  js  c++  java
  • python requests模拟登陆正方教务管理系统,并爬取成绩

    最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了。

    登陆:

      通过抓包,发现需要提交的值

           

    需要值lt,这是个啥,其实他在访问登陆页面时就产生了

           

    session=requests.Session()
    response = session.get(login_url, headers=header)
    cookies = response.cookies
    for c in cookies:
        cookie = c.name + '=' + c.value
    print('cookie-get:' + cookie)
    selector = etree.HTML(response.text)
    token = selector.xpath('//input[@name="lt"]/@value')[0]  # 解析出登陆所需的lt信息
    print(token)

    得到lt的值,加入到自己创建的表单中

    根据上面抓包工具中需要的值,创建所需表单

    login_data={
    'useValidateCode': '0',
                'isremenberme': '1',
                'ip':'',
                'username': username,
                'password': password,
                'losetime': '30',
                'lt': token,
                '_eventId': 'submit',
                'submit1':''
    }

    post请求登陆:

    response = session.post(login_url, data=login_data, headers=header)
    
    print(response.status_code)

    我们成功了,哈哈哈,很开心!

    进入了主页面:

     这是我们登进的页面,要爬取成绩,成绩在教务系统中,细心观察

    get下链接:http://******/xs_main.aspx?xh=***&type=1

    response = session.get(main_url, headers=header)
    print(response.cookies)
    print(response.status_code)
    print(BeautifulSoup(response.text, 'lxml'))

    response.status_code返回200,以为成功了?打印一下

    额!难受,鬼刀一开,看不见........他竟然返回的是登陆界面?

    究竟是什么问题呢,我怀疑是cookie:

    因为

    print(response.cookies)打印的值是:

    <RequestsCookieJar[]>
    浏览器访问抓包看下
    啊嘞嘞,why?
    查看其他请求,在Cookie中竟然都没有创建过ASP.NET_SessionID
    那怎么办呢?
    那我自己写一个吧:
    requests.utils.add_dict_to_cookiejar(session.cookies,{"ASP.NET_SessionId":"0ftp4drb5uar0r55urffkobr"})

    哎呀,成功了。开心,不过似乎ASP.NET_SessionId有时效性。

    不管了,也不知道为啥Session.Cookies得不到所需要的Cookie,先不管了,各位大佬,发现问题的话,或者有啥好的解决办法麻烦告诉下!拜谢

    代码地址:https://github.com/JackyWjx/HNCU下的HNCU.py

     
    ****************************************第二次更新*********************************************************************************************************************************

    这个做法有问题呀:所以:我又来了。。。

    经过学习cookie,意识到自己以前的一些错误,特来改正:

    上篇对于ASP.NET_SessionId值不知道如何解决,只能自己添加

    解决原理:既然ASP.NET_SessionId是一个cookie值,那么有一个请求的作用就是服务器设置ASP.NET_SessionId给浏览器,那么我们就直接拿到这个请求不就迎刃而解了

    请求就知道了,那么请求这个请求就解决了,有由于我们的项目使用的requests那么也不需要设置啥了

     代码地址:

     https://github.com/JackyWjx/HNCU    下的HNCU-neW.py

     
  • 相关阅读:
    setContentView和inflate区别
    eclipse中自动添加注释(作者,时间)
    ImageLoader must be init with configuration before using
    repo用法详解
    SQL 中的N'xx'的作用
    DataRow复制一行到另一个DataTable
    MS SQL SERVER搜索某个表的主键所在的列名
    Win2008 Server R2个人PC化设置
    C# DataTable的詳細用法
    如何解决arcmap中的反走样问题。
  • 原文地址:https://www.cnblogs.com/xr210/p/10335795.html
Copyright © 2011-2022 走看看