0


whut校园网自动连接(使用selenium模块)

from selenium import webdriver    #导入selenium模块
from selenium.webdriver.common.by import By
import time,os,json,os.path    
import pyinputplus as pyip     #第三方包,为输入验证
from pathlib import Path        
from ansilib import ansi       #这个模块可以省略(我自己写的一个函数)
import hashlib                 #哈希加密
import shelve                  #二进制变量保存

1.第三方包的导入(需要先下载):在Windows的终端中输入以下代码

pip install pyinputplus,selenium

2.解释不同的包:

    (1)selenium模块可让Python直接控制浏览器

    (2)from selenium.webdriver.common.by import By 因为会从BY中去查找Webdriver对象中的属性(此代码是查找ID,因为ID属性具有唯一性)

    (3)json模块用来保存账号,密码(被加密过的密码),os.path模块中的getsize()方法来获取文件是否为空,若为空返回0,否则大于0

    (4)pyinputplus模块用于输入验证(其实可用input代替)

二.功能实现

 1.清屏操作:(适用于Windows系统,Linux和Macos系统将cls改为clear)
os.system("cls")
  2.输入账号密码函数  user_name_password():会存在返回值,返回一个列表,包含你的id和密码
def user_name_password():#输入账号密码
    user_id=pyip.inputInt(prompt="请输入你的用户名:")
    #pyip.inputInt()为pyinputplus内的一个输入验证函数,具体是只允许用户输入数字为用户名,若不是 
    #纯数字会让用户重新输入

    user_password=pyip.inputStr(prompt="请输入你的密  码:")
    #pyip.inputStr()为输入字符串

    user_massage=[user_id,user_password]
    return user_massage
    3.加密密码函数 password_hexdigest(Password):采用了md5加密:

             md5加密网站:MD5在线加密/解密/破解—MD5在线 (sojson.com)

            使用了hashlib中的md5加密方式,参数Password为你输入的密码
def password_hexdigest(Password):#md5加密
    md5=hashlib.md5()#创建md5对象

    Password_user=Password.encode(encoding="utf-8")#格式转化

    md5.update(Password_user)#给入加密参数

    userPassword=md5.hexdigest()#加密

    password=[Password,userPassword]
    return password
 4.保存和读取原来的密码函数:使用了shelve模块,因为我拿json文件来保存用户的id和密码,可以直接被点开查看,为了加强隐私,我就将真实密码使用二进制来保存,而你在json文件中看到的密码是经过md5加密后的,如果不需要加密可以看后面的源代码(简单的和复杂的)
def save_password(password):#保存原来真实的密码(二进制)
    shelffile=shelve.open("mm")
    # 相当于open()方法,返回了一个shelffile对象,没有就会创建三个文件(三个后缀名不一样的)
    #里面得数据为二进制数据

    shelffile["password"]=password
    # shelve的对象类似与python中的字典和列表关系,这里采用了字典,shelffile["password"]中的 
    # password为键,后面的为输入的参数(为键password的值),此时数据转换成了二进制

    shelffile.close()


def read_password():#读取原来真实的密码
    shelffile=shelve.open("mm")
    password=shelffile["password"]
    shelffile.close()
    return password

5.判断账号是否存在函数 user_exist():json,pathlib模块

def user_exist():#判断账号是否存在
    with open("user.json","a",encoding="utf-8"):
        path=Path("user.json")
        pass
    #第一个打开user.json文件是以追加模式打开,如果文件不存在就创建,创建的文件为空



    if os.path.getsize(path)==0:
    #判断文件是否为空,若为空执行下面操作

        with open("user.json","w",encoding="utf-8") as fp:
            json.dump([],fp)
        #打开这个json文件,给这个文件加一个空列表进去(用来保存用户信息的列表,列表的元素为字典)

        id,Password=user_name_password()#调用了输入用户信息函数

        password1,password2=password_hexdigest(Password)#1为未加密的密码,2为加密后的密码

        save_password(password1)#保存真实密码

        user={
            f'{id}':f'{password2}',
        }
        user_list=[user]
        with open("user.json","w",encoding="utf-8") as fp:
            json.dump(user_list,fp)
        #将用户信息写入json文件中

    with open("user.json","r",encoding="utf-8") as fp:
        list_dictionary=json.loads(fp.read())
        dictionary=list_dictionary[0]
    #读取json文件中的数据

    password1=read_password()#从shelve保存的二进制文件中得到真实密码

    for i in dictionary.keys():
        User=[i,password1]  
    return User#返回一个id和真实密码的列表

6.登录用户函数 simulate(id,Password):使用selenium模块(爬虫)

    里面ID所对应的数据均来源登录界面的抓包,如图为用户名属性ID对应的值为username

def simulate(id,Password):#模拟浏览器登录校园网
    #不直接退出浏览器的方法
    # option=webdriver.EdgeOptions()
    # option.add_experimental_option("detach",True)
    # browser=webdriver.Edge(options=option)

    #直接退出浏览器
    browser=webdriver.Edge()#获得一个Webdriver对象(Edge为我的浏览器,跟据你的浏览器修改)
    browser.get("http://172.30.21.100/tpl/whut/login.html?acip=172.30.1.223&acname=WHUT-Bras-ME60-A&ip=10.84.131.112&nasId=52&userip=10.84.131.112&wlanacname=")
    #打开用户登录界面browser.get()


    #根据标签By.ID(找到<input>中去了)去查找ID的值value(即元素),返回一个WebElement对象,这个对象有一个click()方法,模拟鼠标在该元素上单击,Webdrive对象中的find_element()方法意思是在网页的源码中去查找属性
    #ID具有唯一性
    user_name=browser.find_element(by=By.ID,value="username")
    password=browser.find_element(by=By.ID,value="password")
    btn=browser.find_element(By.ID,"login-account")

    #给Web页面的文本字段发送按键事件信息。找到那个文本字段的<input>元素,send_keys("")方法为输入的按键消息
    user_name.send_keys(id)
    password.send_keys(Password)

    #模拟单击(webelement的方法)
    btn.click()

    browser.close()

7.main函数和运行:

     ansi.text_color(31),print("登录成功"),ansi.text_reset()的作用只是将输出的 登录成功字样变色,如果不需要直接删除ansi的这两个函数
def main():
    user_massage=user_exist()
    id,Password=user_massage
    simulate(id,Password)
    os.system("cls")
    ansi.text_color(31)
    print("登录成功")
    ansi.text_reset()
    time.sleep(1)
    quit()

if __name__=="__main__":
    main()

三.源代码

1.简单的

     方法比较简单
from selenium import webdriver 
from selenium.webdriver.common.by import By
import time,os


os.system("cls")
browser=webdriver.Edge()
browser.get("http://172.30.21.100/tpl/whut/login.html?acip=172.30.1.223&acname=WHUT-Bras-ME60-A&ip=10.84.131.112&nasId=52&userip=10.84.131.112&wlanacname=")


user_name=browser.find_element(by=By.ID,value="username")
password=browser.find_element(by=By.ID,value="password")
btn=browser.find_element(By.ID,"login-account")


#输入你的用户名和密码,直接将下面的**改掉
user_name.send_keys("********")
password.send_keys("*********")


btn.click()

time.sleep(2)
browser.close()

2.复杂的

    有个缺点:账号密码不能输入错误(只有第一次运行需要输入账号和密码),如果输入错误会一直登录不上,解决办法就是把运行代码产生的四个文件删除,再运行代码,重新输入即可
from selenium import webdriver 
from selenium.webdriver.common.by import By
import time,os,json,os.path
import pyinputplus as pyip
from pathlib import Path
from ansilib import ansi
import hashlib
import shelve


os.system("cls")

def user_name_password():#输入账号密码
    user_id=pyip.inputInt(prompt="请输入你的用户名:")
    user_password=pyip.inputStr(prompt="请输入你的密  码:")
    user_massage=[user_id,user_password]
    return user_massage

def password_hexdigest(Password):#md5加密
    md5=hashlib.md5()#创建md5对象
    Password_user=Password.encode(encoding="utf-8")#格式转化
    md5.update(Password_user)#给入加密参数
    userPassword=md5.hexdigest()#加密
    password=[Password,userPassword]
    return password

def save_password(password):#保存原来真实的密码(二进制)
    shelffile=shelve.open("mm")
    shelffile["password"]=password
    shelffile.close()


def read_password():#读取原来真实的密码
    shelffile=shelve.open("mm")
    password=shelffile["password"]
    shelffile.close()
    return password


def user_exist():#判断账号是否存在
    with open("user.json","a",encoding="utf-8"):
        path=Path("user.json")
        pass
    if os.path.getsize(path)==0:
        with open("user.json","w",encoding="utf-8") as fp:
            json.dump([],fp)
        id,Password=user_name_password()
        password1,password2=password_hexdigest(Password)#1为未加密的,2为加密后的密码
        save_password(password1)
        user={
            f'{id}':f'{password2}',
        }
        user_list=[user]
        with open("user.json","w",encoding="utf-8") as fp:
            json.dump(user_list,fp)
    with open("user.json","r",encoding="utf-8") as fp:
        list_dictionary=json.loads(fp.read())
        dictionary=list_dictionary[0]
    password1=read_password()
    for i in dictionary.keys():
        User=[i,password1]  
    return User


def simulate(id,Password):#模拟浏览器登录校园网
    #不直接退出浏览器的方法
    # option=webdriver.EdgeOptions()
    # option.add_experimental_option("detach",True)
    # browser=webdriver.Edge(options=option)
    browser=webdriver.Edge()#直接退出浏览器
    browser.get("http://172.30.21.100/tpl/whut/login.html?acip=172.30.1.223&acname=WHUT-Bras-ME60-A&ip=10.84.131.112&nasId=52&userip=10.84.131.112&wlanacname=")

    #根据标签By.ID(找到<input>中去了)去查找ID的值value(即元素),返回一个WebElement对象,这个对象有一个click()方法,模拟鼠标在该元素上单击
    #ID具有唯一性
    user_name=browser.find_element(by=By.ID,value="username")
    password=browser.find_element(by=By.ID,value="password")
    btn=browser.find_element(By.ID,"login-account")

    #给Web页面的文本字段发送按键事件信息。找到那个文本字段的<input>元素,send_keys("")方法为输入的按键消息
    user_name.send_keys(id)
    password.send_keys(Password)

    #模拟单击(webelement方法)
    btn.click()

    browser.close()


def main():
    user_massage=user_exist()
    id,Password=user_massage
    simulate(id,Password)
    os.system("cls")
    ansi.text_color(31)
    print("登录成功")
    ansi.text_reset()
    time.sleep(1)
    quit()


if __name__=="__main__":
    main()

可以使用pyinstaller模块(需要使用pip下载)生成可执行文件 .exe,类似小软件

pyinstaller -onefile ****.py           

#  **为你这个python文件的文件名
标签: selenium python

本文转载自: https://blog.csdn.net/2301_80643801/article/details/142929517
版权归原作者 CranGG 所有, 如有侵权,请联系我们删除。

“whut校园网自动连接(使用selenium模块)”的评论:

还没有评论