Python3+Requests库带验证码登陆学校教务系统的尝试。

2023-05-16

毕业快两年了,上班空闲摸鱼的时候无意中打开了学校的教务系统。发现浏览器还记着我的学号和登陆密码(果然是很多东西你自己都忘了,浏览器的云端都帮你记着),输入验证码之后居然登陆进去了。学校的教务系统还是一如既往地难看。

可能是兼容性的问题,这个系统在WinXP中能够完美运行,但是在Win7及以上的浏览器中都是不能显示全部的,以前没有搞清楚这个问题,是因为以前大家的电脑上都是Win7、Win8和Win10。存粹就是骂网站,从来不找原因[doge]。如果不改兼容性的话,会提示不能创建对象。改了兼容性之后,就会像上图这样,右上角的部分文字都是白色的,然后页面像是被切了一样的显示出来。

之前为了爬取发货订单,写了一段登陆公司OA平台的代码,由于是内部系统,所以对反爬虫机制没有那么严格,没有验证码的情况下很容易就用Python爬进去了。始终没什么机会去爬带验证码的网站。这次正好碰到了学校的教务系统,就拿来练练手。由于从来没有接触过,就百度了几篇经验blog,总结出了一些内容,为我提供了帮助。

1、网站后台对验证码的判断方法

其实在没看blog之前,我一直对网站判断验证码的方法有疑问,毕竟不能直接把验证码的结果先传过来,由JavaScript来判断,不然任何一个网抓技术就都能很轻易的长驱直入了。而且,这么多人同时登陆网站,网站是如何分辨的。这两天才知道,网站是通过Cookie来区分不同的浏览器Post的数据,并针对Cookie返回相应的结果。

2、带验证码登陆的步骤

根据搜集到的资料,以及实际的操作,在当前的情况下,带验证码登陆的步骤如下:

(1)获取验证码的图片,并保留验证码网页的Cookie

(2)向网站登陆网址Post数据

(3)Get网站登陆后网址的信息

3、实际操作

很多大神是通过urllib库和Http.CookieJar库来操作的,个人比较倾向于requests库,操作上比较简单。

#/usr/bin/env python
#-*-coding:utf-8-*-
import requests
homeurl='http://www2.hnjtzy.com.cn'
codeurl=homeurl+'/jwnet/other/CheckCode.aspx?datetime=az'
posturl=homeurl+'/jwnet/login.aspx'
geturl=homeurl+'/jwnet/JWXS/Default.aspx'
mydeskurl=homeurl+'/jwnet/JWXS/OA_DESK.aspx'

ress=requests.session()

def Login():
    headers={'Accept':'image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5',
             'Referer':'http://www2.hnjtzy.com.cn/jwnet/login.aspx',
             'Accept-Language':'zh-CN',
             'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
             'Accept-Encoding':'gzip, deflate',
             'Host':'www2.hnjtzy.com.cn',
             'Connection':'Keep-Alive'}
    code=ress.get(codeurl,headers=headers)
    with open('code.jpg','wb') as file:
        file.write(code.content)
        file.close

    headers={'Accept':'text/html, application/xhtml+xml, */*',
             'Referer':'http://www2.hnjtzy.com.cn/jwnet/login.aspx',
             'Accept-Language':'zh-CN',
             'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
             'Accept-Encoding':'gzip, deflate',
             'Host':'www2.hnjtzy.com.cn',
             'Connection':'Keep-Alive',
             'Cache-Control':'no-cache'}
    vusername=input('请输入用户名:')
    vpassword=input('请输入密码:')
    vcode=input('请输入验证码:')
    data={'__VIEWSTATE':'/wEPDwULLTEyMzg5MzU4MjgPZBYCAgMPZBYEAg0PDxYCHgRUZXh0ZWRkAg8PDxYCHwAFATdkZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUHQ2hrVXNlcg2Rn2ww7opTFHCp2zYdC8U7VKuj',
          '__EVENTVALIDATION':'/wEWBgLqtf3ACQKvo8HwCwKG85bvBgLO44u1DQLAiqigBwKZwO3DDXUidV3/JkCNp7t9Q0L9lF+crP3N',
          'Account':vusername,
          'PWD':vpassword,
          'CheckCode':vcode,
          'cmdok':''}
    post=ress.post(posturl,headers=headers,data=data)
    get=ress.get(geturl,headers=headers)
    if '请输入验证码' in get.text:
        print('信息不符合,请重新输入')
        Login()
    else:
        MyDesk()

def MyDesk():
    headers={'Accept':'text/html, application/xhtml+xml, */*',
             'Referer':'http://www2.hnjtzy.com.cn/jwnet/login.aspx',
             'Accept-Language':'zh-CN',
             'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
             'Accept-Encoding':'gzip, deflate',
             'Host':'www2.hnjtzy.com.cn',
             'Connection':'Keep-Alive',
             'Cache-Control':'no-cache'}
    mydesk=ress.get(mydeskurl,headers=headers)
    print(mydesk.text)

Login()

原理上是先下载验证码到电脑,然后通过人工输入用户名、密码和验证码的方式实现登陆。Post的数据是从开发者工具里面获取的。

做完这些之后,其实心里面有种做个小的教务系统客户端的念头,不过很快就打消了,哈哈哈哈,毕竟实在是有点花时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3+Requests库带验证码登陆学校教务系统的尝试。 的相关文章

  • 时间序列预测——Prophet模型

    文章链接 xff1a 时间序列预测 ARIMA模型 https blog csdn net beiye article details 123317316 spm 61 1001 2014 3001 5502 1 Propht模型概述 Pr
  • 机器人导航——路径跟踪

    要完成一套完整的机器人路径规划 xff0c 并完成其物理实验并非一件简单的事情 参考 xff1a http wenku baidu com link url 61 n11mP6EDlM78NZYZ4yQYXzmzPeBV6BeLNOUjIv
  • python 读取txt出现\xef\xbb\xbf…的问题

    用python读取txt文件 xff0c 文件的内容是一列数如下 xff1a 1883 1886 1900 1900 1897 1897 1897 1897 1906 1917 1910 1910 但是读取的时候第一个元素为 xef xbb
  • (算法)判断两个区间是否重叠

    题目 xff1a 判断两个区间是否重叠 思路 xff1a 假设区间表示为 start end xff0c 先存在两个区间A B 两个区间的关系有两种 xff1a 重叠与不重叠 重叠的情况有4种 xff0c 两种相交 xff0c 两种包含 x
  • python ctrl+c 退出while True:

    写了一个死循环 xff0c 类似 xff1a def function while True my code 程序运行后想用ctrl 43 c按键停止程序 xff0c 可是终止不了 以下为解决办法 xff1a 第一步 xff1a 加入sys
  • python二维字典

    感谢原文 xff1a http www jb51 net article 83108 htm 本文实例讲述了Python的 二维 字典 two dimension dictionary 定义与实现方法 分享给大家供大家参考 xff0c 具体
  • ros安装出现依赖问题

    http www liuxiao org 2015 10 ros E5 9C A8 ubuntu 14 04 E7 B3 BB E7 BB 9F E4 B8 8A E5 AE 89 E8 A3 85 ros indigo 0 安装环境 xf
  • KMP算法介绍

    参考 xff1a https www cnblogs com c cloud p 3224788 html 前言 之前对kmp算法虽然了解它的原理 xff0c 即求出P0 Pi的最大相同前后缀长度k xff1b 但是问题在于如何求出这个最大
  • 【python】*与** 参数问题

    原文地址 xff1a https www cnblogs com paulwinflo p 5764748 html 可变参数 在Python函数中 xff0c 还可以定义可变参数 顾名思义 xff0c 可变参数就是传入的参数个数是可变的
  • 计算机网络编程知识总结

    博客出处 xff1a http www cnblogs com maybe2030 阅读目录 1 网络层次划分 2 OSI七层网络模型 3 IP地址 4 子网掩码及网络划分 5 ARP RARP协议 6 路由选择协议 7 TCP IP协议
  • 机器学习——决策树(decision tree)

    相关文章链接 xff1a 机器学习 人工神经网络 xff08 NN xff09 机器学习 卷积神经网络 xff08 CNN xff09 机器学习 循环神经网络 xff08 RNN xff09 机器学习 长短期记忆 xff08 LSTM xf
  • 基于UDP的Winsock编程(C++版)

    基于UDP的Winsock编程与基于TCP的Winsock编程相比 xff0c 只是缺少了一个步骤而已 对于Server xff0c 缺少了接受连接的过程 xff08 accept 函数调用 xff09 xff1b 对于Client xff
  • Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven re

    Using insecure protocols with repositories without explicit opt in is unsupported Switch Maven repository maven4 http ma
  • 解析APK的AndroidManifest.xml

    将apk重命名zip解压后获取的AndroidManifest xml是加密后的 xff0c 如果需要看到里边的具体的内容信息 xff0c 需要使用AXMLPrinter2 jar来进行 1 网上下载工具AXMLPrinter2 jar工具
  • unity Symbolicate Android crash

    参考链接 https support unity com hc en us articles 115000292166 Symbolicate Android crash https docs unity3d com Packages co
  • 【无标题】

    Starting a Gradle Daemon 1 incompatible Daemon could not be reused use status for details Configure project launcher WAR
  • unity里生成的.csproj和.sln :assembly definition

    有一段时间一直没明白为啥有的时候第三方的package里的代码没法引用我们项目的 最近有点心得 记录下 在创建unity项目的时候默认是创建一个解决方案就是以 sln为结尾的 默认开发时都在同一个解决项目里 所以不会出现相互引用不到的问题
  • Jenkins 报错: command not found

    主要是路径问题 xff0c Jenkins无法识别 在一台 macOS 的 anget 中 xff0c 我们的 pipeline 脚本一直报错 xff1a cmake command not found xff0c 但实际系统中已经通过 b
  • java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.

    改成 30 就好了
  • UnityEngine.JsonUtility.FromJson 一直序列化失败坑多多

    今天写了个小工具 xff0c 偷懒就使用json数据存储 xff0c 结果一直转换失败 xff0c 查了半响 xff0c 原来是忘了加 Serializable xff0c 感觉好坑 xff0c 如果是本身数据类型是没有问题的 xff0c

随机推荐

  • STM32单片机ESP8266发送数据到WiFi接收端代码实现

    ESP8266支持的一些指令看我另一篇博文 xff1a http blog csdn net qq 17242837 article details 53931712 首先需要配置STM32的串口发送和接收 xff0c 在本文中基于原子和网
  • 机器学习——XGboost模型

    相关文章链接 机器学习 人工神经网络 xff08 NN xff09 机器学习 卷积神经网络 xff08 CNN xff09 机器学习 循环神经网络 xff08 RNN xff09 机器学习 长短期记忆 xff08 LSTM xff09 机器
  • 处理https中的Digest authentication鉴权

    问题 xff1a RESTful 的传输协议类型为 HTTPS xff0c 鉴权方式为 Digest SHA256 xff08 即DIGEST摘要认证 xff09 时 xff0c 接口调用问题 参考资料 xff1a 认识HTTP摘要认证 x
  • 自旋锁代码实现

    package com xiang lock import java sql Time import java util concurrent TimeUnit import java util concurrent atomic Atom
  • Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建

    前言 最近想开发一套Netty网关日志分析程序 xff0c 用来分析设备的原始数据 因为网关是放在linux服务器上 xff0c 之前查看日志是通过Xftp工具将日志下载到本地 xff0c 然后找到对应的日志数据进行分析 对于运维人员来说
  • Python开发Windows桌面应用程序(二)简单应用程序实现

    前言 上编blog说到用Python开发Windows桌面应用程序的环境搭建 xff0c 下面就说说如何实现一个简单的远程日志读取的功能 界面绘制 打开界面绘制工具 xff0c 选中项目后 xff0c 右键找到External Tools
  • Java SpringBoot集成微信告警推送服务

    一 申请微信告警模板 登录微信公众号平台 xff0c 在服务里面找到模板消息 我们点击从模板库中添加一个模板消息 可以通过关键字搜索告警模板 xff0c 点击详情可以查看该模板的详情与示例 xff0c 判断该模板是否试用与我们 最后找到合适
  • 物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等

    1 前言 最近对物联网产品自组网技术选型 xff0c 找到合适的组网技术 xff0c 让产品自行组网并完成数据的传输 2 参数对比 3 优缺点描述 3 1 蓝牙 优点 xff1a xff08 1 xff09 低功率 xff0c 便于电池供电
  • C# 实现国密SM3加解密封装

    1 Portable BouncyCastle 引入 右键解决方案的引用 xff0c 选择管理NuGet程序包 在浏览的搜索框中搜索 xff1a Portable BouncyCastle 选择第一个 xff0c 在右侧点击安装即可完成程序
  • Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别(照片对比)

    1 安装包依赖 与上篇通过摄像头动态识别人脸一样 xff0c 先下载好opencv python face recognition xff0c 这里因为使用的是照片对比的方式 xff0c 特意使用tkinter画了一个简单的GUI方便操作
  • Ubuntu 下NGINX 的简单使用

    1 NGINX的安装与卸载 1 1 安装NGINX apt get install nginx 1 2 NGINX操作命令 service nginx start 启动 service nginx reload 重新加载配置文件 servi
  • SpringBoot 集成Shell命令实现系统日志查询并通过API返回给前端

    1 目的 在做物联网项目中 xff0c 为了方便产品测试人员以及第三方产品集成商能通过系统快速获取设备原始数据 xff0c 因此考虑在物联网终端管理平台增加读取物联网通讯服务记录的终端日志的功能 我的想法是直接通过Java操作Linux服务
  • SPSS软件实操——ARIMA时间序列预测模型

    相关文章链接 时间序列预测 ARIMA模型 https blog csdn net beiye article details 123317316 spm 61 1001 2014 3001 5501 案例 xff1a 基于ARIMA模型对
  • SpringBoot使用阿里云邮件服务实现账户分享

    1 阿里云邮件集成 详情参见 xff1a Java SpringBoot集成阿里云短信与邮件服务 阿里云短信jar包 大鱼 gt 的博客 CSDN博客 2 使用Html模板实现邮件内容样式 2 1 引入pom lt dependency g
  • OSM学习之路(一):OSM介绍

    背景 xff1a 公司作为车联网行业 xff0c 少不了与地图打交道 xff0c 之前一直依赖谷歌 xff0c 百度等三方地图供应商来处理地图方面问题 但是随着客户量越来越大 xff0c 谷歌的吃相变得越来越难看 自7月16日起 xff0c
  • C语言单链表和结构体的结合

    链表与结构体的结合 xff0c 可以很好的方便输入输出 xff0c 以后使用链表时只需要将结构体的信息稍作修改就可以使用 xff0c 非常方便 xff01 xff01 xff01 下面是写学生学号和姓名的结构体与链表的结合create函数
  • struct和class的区别

    总结 xff0c 主要有这么几点不同 xff1a 1 struct 是值类型 xff0c class 是对象类型 2 struct 不能被继承 xff0c class 可以被继承 3 struct 默认的访问权限是public 而class
  • c++中模板类的成员函数的声明与定义应该放在头文件里

    今天尝试自己实现vector数据结构底层 xff0c 在定义vector模板类的时候 xff0c 还想像往常一样把类分为 h文件和 cpp文件 xff0c 把成员函数的声明放在 h文件中 xff0c 把具体实现放在 cpp文件中 xff0c
  • Byte 高位/低位简介绍(大端格式/小端格式)

    一个byte由8个二进制位构成1个字节 即1Byte 61 8Bit 其中左边是高位 xff0c 右边是低位 high four 61 byte amp 0xf0 gt gt 4 0xf0 61 11110000 low four 61 b
  • Python3+Requests库带验证码登陆学校教务系统的尝试。

    毕业快两年了 xff0c 上班空闲摸鱼的时候无意中打开了学校的教务系统 发现浏览器还记着我的学号和登陆密码 果然是很多东西你自己都忘了 xff0c 浏览器的云端都帮你记着 xff0c 输入验证码之后居然登陆进去了 学校的教务系统还是一如既往