Python3 编写的开机自动BUPT校园网登录脚本

首先说明,作者win10系统,anaconda 5.2版本(内含python 3.7版),这个脚本其实是分成两部分,python3部分负责向校园网post自己的账号密码的表单信息,还有一个bat脚本,也就是批处理脚本,负责开机后自动启动python脚本。
这个脚本的 第二版链接。

以下-----废话

最近在学习python语言,正好还有一门陈光老师的‘网络搜索引擎’,收货颇丰。因为自己每次开机总是要打开网页,打开校园网网页,点两下才能上网,闲暇做一个小脚本,方便生活。

以下-----正文

  1. 环境安装,有python 环境即可,不一定都需要anaconda,在python 3 下需要安装一个第三方包 requests 包。

  2. 上自己的校园网爬取上网操作的一个post请求。
      在这里解释一下,本地计算机对访问网站的服务器一般都只使用HTTP的两种方法,一是GET方法,这个只是本地向服务器提出一个GET请求内容,服务器就会发送网页内容给你,但是GET请求的各个参数会显示在你的URL里,也就是你可以通过你访问的网址看出你的参数信息,显然,登录网站不能使用这种方式,不然账号密码直接被人看走了。第二种就是POST方法,post请求会把用于登录的账号,密码,放到requests body进行发送,这样就不会在网址那栏看到自己的信息了。
      更加详细的介绍可以看下面大佬的文章

博客园- 在途中# https://www.cnblogs.com/logsharing/p/8448446.html

打开浏览器,我的是Google浏览器,打开登录网址 http://ngw.bupt.edu.cn/
按F12进入开发者模式,选中那个Network那一栏,然后在进行登录操作,这个时候就会看到本机和网站的服务器的各种请求。
Python3 编写的开机自动BUPT校园网登录脚本_第1张图片
  可以看到以下请求,找出哪个是post请求,哪些是get请求,我们需要的就是哪个post请求。Python3 编写的开机自动BUPT校园网登录脚本_第2张图片
 Python3 编写的开机自动BUPT校园网登录脚本_第3张图片
  login 就是我们需要的POST请求,然后呢,我们需要的内容都在request headers里面,有最重要的cookie,还有session,这都是我们需要的。(cookie是个比较私密的东西,我就匿了)
Python3 编写的开机自动BUPT校园网登录脚本_第4张图片

  1. 下面就是一个小手段了,将login这个post请求的cURL复制下来,到https://curl.trillworks.com/ 转成我们我们需要的python代码。
    cURL代码里面是一个对网站的请求过程,将他复制下来就可模拟对网站的访问请求。
    Python3 编写的开机自动BUPT校园网登录脚本_第5张图片
    Python3 编写的开机自动BUPT校园网登录脚本_第6张图片

  2. 将转换来的python代码,复制到你的python编辑器里就好了,在这个时候已经可以模拟一个登录校园网的过程了。Python3 编写的开机自动BUPT校园网登录脚本_第7张图片
      在data里可以看到用户名,密码和线路,校园网就是空,联通是‘CUC-BRAS’,移动是‘ CMCC-BRAS’,电信是‘CT-BRAS’ ,这个是很私密的信息了 0.0。。。
      在这里要注意你的用户名和密码有没有多一个‘^ ’ 这个是个bug,要把这个去掉‘^ ’才行。
      
      然后捏,我们可以看到cookies里面有一串,还有一段session Id,这就是另一个要理解的过程了。。。
    -------------------------------------------------------------------------------------------------------  
      “小饼干技术”(Cookie),服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
      而小饼干这些数据都是存放在自己的浏览器内的,你的每次GET请求都会夹带着你的小饼干,从而让网站返回关于你的信息,如果别人截获了你的小饼干,然后利用你的小饼干登录一些只需要cookie的网站,这个网站还是认为是你在操作,所以引进了session的安全机制。session相当于是存在网站服务器内的一个有时限密码(他是会变化的,最少也会半个小时变换一次),用户第一次登陆网站,网站会对用户分发一个session,这个session字段就会作为你的cookies,因为我们可以对这个session进行数字签名(这可能就涉及到别的签名秘钥的东西了),即使别人得到也无法使用。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
      -------------------------------------------------------------------------------------------------------

  3. 所以我们上面的到的代码是有时效性的,可能过了半小时就无法使用了。我们要在登录操作之前,先访问一下这个网络,获取我们的session字段保存下来,然后就可以进行登录啦~
        session = requests.Session()
        r = session.get(url)
      我们使用request的Session方法,这个session对象就会对cookie表单信息进行一直跟踪,我们只需进行一次get操作就可以得到服务器分配给自己的Session。对session对象使用 .cookies.get_dict()方法就可以读出Session。

''' 
version: v 1.0
author : BBbiao
descripe: 实现对指定网页的联网操作,并且需指定cookie,连接线路,无返回结果
          学校的用户名和密码都是明文传输,不带编码,存在很大的安全隐患。
          其他的编码一般是base64,常量掩码等,python都有这方面的现成库,加上即可。
'''

import requests    #主要功能的包  post请求

session = requests.Session()
url = 'http://ngw.bupt.edu.cn/login ' #登录网址

#cookies的前半部分,他的前面的一段是固定不变的,但是session部分是随时间变换的。所以cookies要用后面拼接而成
cookie = {
    'Hm_lvt_41e71a1bb3180fxxxxxx3xxx3d23d0c0': '1540346xxx,1540346xxx,1540776xxx,1542023xxx',
}

#连接请求头,有些是可以被去掉的,我这里没有进行删除
headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Origin': 'http://ngw.bupt.edu.cn',
    'Upgrade-Insecure-Requests': '1',
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Referer': 'http://ngw.bupt.edu.cn/index',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

#用户的数据
data = {
  'user': '2018140068',
  'pass': 'xxxxxx',
  'line': 'CUC-BRAS'   #连接线路 联通
}
#先向网址发送一个GET请求,获取session值,然后拼接到Cookies里,得到一个完整的cookies
r = session.get(url)
cookies = cookie.copy()
cookies.update(session.cookies.get_dict())
#print(cookies)

s = session.post(url, headers=headers, cookies=cookies, data=data)

  1. 这是第一个版本,无返回值的,不能判断是否登录成功,不过做到这里我们可以直接双击这个.py文件进行登录校园网操作了。
      我们最后一个操作就是写一个.bat文件,打开记事本。
@echo off
echo ...
echo ...
echo ...

python D:\#workspace\Network\Netlaunch.py
echo 登录成功

pause

哈哈哈哈哈哈哈,只有python 那行是有用的,其他的都是装饰。要写出刚刚编写的.py文件的文件位置,然后将这个记事本的后缀改为.bat文件。
   然后将它放在你电脑的启动文件夹中,就OK了。
  C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  
这个脚本还需改进,需要一个正确的反馈信息。我会后续跟进。
啧啧,第一次写这个,陈光老师贼优秀,网络搜索引擎还有很多功能。感谢网上各种大佬文章。代码上传到我的GitHub上,https://github.com/BBbiao/Network
喜欢可以点星星,谢谢~

你可能感兴趣的:(python,web,scrap)