#Python #爬虫

# 前言

做个开机自动登录 WiFi 脚本

# 配置环境

  • Python 3.7
  • Pycharm
  • Fiddler Everywhere

# 抓包分析

登陆界面

请求地址

http://211.69.15.33:9999/portalAuthAction.do

请求数据

其中关键的只有 wlanuserip,wlanacIp,userid,useridtemp,passwd。

wlanuserip,wlanacIp 可以通过 ipconfig 获取,也可以访问校园网界面,获取参数,这里选择后者。

# Python 代码

import requests
from bs4 import BeautifulSoup
from win10toast import ToastNotifier
import webbrowser

class HAITWIFI:

def __init__(self):
    self.username = '用户名'
    self.password = '密码'
    # 移动@gxyyd  联通@gxylt  电信@gxydx
    self.operator = {'1': '@gxyyd', '2': '@gxylt', '3': '@gxydx'}.get('1', '@gxyyd')

def getIP(self):
    # 获取动态参数
    url = '校园网url'
    r = requests.get(url)
    soup = BeautifulSoup(r.content, 'html5lib')
    wlanuserip = soup.find('input', attrs={'name': 'wlanuserip'}).attrs['value']
    wlanacip = soup.find('input', attrs={'name': 'wlanacIp'}).attrs['value']
    return wlanuserip, wlanacip

def login(self):
    # 登录模块
    ip = self.getIP()
    login_url = "登录url"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/85.0.4183.121 Safari/537.36',
        'Referer': '校园网url',
    }
    post_data = {'wlanuserip': ip[0],
                 'wlanacname': 'HAIT-SR8808',
                 'chal_id': '',
                 'chal_vector': '',
                 'auth_type': 'PAP',
                 'seq_id': '',
                 'req_id': '',
                 'wlanacIp': ip[1],
                 'ssid': '',
                 'vlan': '',
                 'mac': '',
                 'message': '',
                 'bank_acct': '',
                 'isCookies': '',
                 'version': '0',
                 'authkey': '88----89',
                 'url': '',
                 'usertime': '0',
                 'listpasscode': '0',
                 'listgetpass': '0',
                 'getpasstype': '0',
                 'randstr': '7150',
                 'domain': '',
                 'isRadiusProxy': 'true',
                 'usertype': '0',
                 'isHaveNotice': '0',
                 'times': 12,
                 'weizhi': 0,
                 'smsid': '',
                 'freeuser': '',
                 'freepasswd': '',
                 'listwxauth': '0',
                 'templatetype': '1',
                 'tname': 'gxy_pc_portal',
                 'logintype': '0',
                 'act': '',
                 'is189': 'false',
                 'terminalType': '',
                 'checkterminal': 'true',
                 'portalpageid': '23',
                 'listfreeauth': '0',
                 'viewlogin': '1',
                 'userid': self.username + self.operator,
                 'authGroupId': '',
                 'smsoperatorsflat': '',
                 'useridtemp': self.username + self.operator,
                 'passwd': self.password,
                 'operator': self.operator}
    r = requests.post(url=login_url, data=post_data, headers=headers)
    bs = BeautifulSoup(r.content, 'html5lib')
    toaster = ToastNotifier()
    if bs.find_all('input', id='loginOut') != []:
        toaster.show_toast('WIFI登录', '登录成功', icon_path='D:\\Program Files\\Python37\\DLLs\\py.ico', duration=2, threaded=True)
    else:
        toaster.show_toast('WIFI登录', '登录失败', icon_path='D:\\Program Files\\Python37\\DLLs\\py.ico', duration=2, threaded=True)
        webbrowser.open(
            'http://url/portalReceiveAction.do?wlanuserip=' + ip[0] + '&wlanacname=HAIT-SR8808')

HAITlogin = HAITWIFI()
HAITlogin.login()

# 添加 Win10 弹窗提醒

这里我使用的是 win10toast 模块,创建对象后,使用 show_toast() 即可成功弹窗。

# 开机自启

  • 方案一 加入 Windows 服务
    首先使用 Pyinstaller 将程序编译为 exe,然后使用 WinSW,将程序添加为 Windows 服务。
    优点:B 格很高
    缺点:有 BUG,可能是 win10toast 的问题,也可能是 python 打包文件的问题,虽然能完成登录,但无法弹窗。
  • 方案二 添加到 启动 文件夹
    这种很简单,写一个 bat,运行脚本,最后把 bat 放到 AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 文件夹中即可。
    优点:简单,实用
    缺点:B 格不够,运行太慢,会弹黑框框

请我喝[茶]~( ̄▽ ̄)~*

a1oyss 微信支付

微信支付