selenium:python如何绕过登录页面登录网页
NETDEV_Init 初始化
NETDEV_Login_V30 ipc设备登录
NETDEV_QueryVideoChlDetailList 查询视频通道信息列表
NETDEV_CaptureNoPreview 设备抓图
使用restype 设置接收参数的类型
HIKSDKNETDEV_Login_V30restype = ctypesc_void_p
假如不设置接收参数的类型,会抛出异常:内存地址不一致
指针类型作为返回值传递给python时,在未设置类型的时候,会发生默认截断的问题
sdk日志:
python日志:101200(用户不在线)
https://docspythonorg/36/library/ctypeshtml#fundamental-data-types
http://icejoywoogithubio/2018/12/10/intro-python-ctypshtml
本例,展示了通过登录界面打开主界面的实现方式。
在开始实现登录界面前,先给大家普及一下PyQt5的安装以及使用
pip install PyQt5
pip35 install pyqt5-tools
1在win+R中输入designer并敲回车,即可启动Designer。一般选择“Main Window”点击“Create”即可创建。
若在win+R中输入designer并敲回车后无反应,可以直接搜designerexe直接启动
2创建后,可以方便快捷的用Qt Designer画出对应框体,如通过Combo Box添加下拉选择的控件;通过Push Button添加按钮;通过List Widget添加列表框;通过Table Widget添加数据表格框,table中设置列数(右键-Edit Items-Colums),调整框体位置和文字大小,背景颜色以及windowTitle来优化界面显示,使用快捷键Ctrl+R预览当前编写的GUI显示如下:
3点击保存,生成ui的文件,本例中为testui,保存在D:\py\deploy文件夹下
使用场景
在面对需要账号密码登录的网页时,可以通过定位输入框,使用send_keys
输入账号密码登录。
但是在面对某些无法通过页面直接登录的场景,比如需要微信或者软件扫码、验证码等才能进入页面的情况时,就可以通过cookie进行登录。
本文主要介绍通过记录上一次登录网页的cookie,在cookie生效期间直接绕过登录页面直接进入系统的登录方式。
登录页面后获取登录的cookie
读取之前存入的cookie
这样只要记录的cookie生效,那么就可以不用每次进入系统时都需要在登录页面登录啦~
python编写一个脚本的具体操作:
1、首先,打开python并创建一个新的PY文件。
2、其次,import os,因为涉及系统文件的路径,因此首先在此处导入系统模块。
3、随后,可以双击打开HTML文件,然后就可以看到书写的网页,如下图所示。
4、最后,添加htmlclose(),需添加此行代码以关闭,否则将占用大量内存,如下图所示。这样,用python简单的制作一个网页的所有操作就完成了。完成。
大致的思路是先抓包,分析登陆包以及服务器返回的数据包的内容,然后用Python写。可以使用urllib2,cookiejar,beautifulsoup(这个用来分析网页,当然,自己用正则构造一个类效率会更高)这几个类。
import tkinter as tk
import mysqlconnector
# 创建MySQL数据库连接
mydb = mysqlconnectorconnect(
host="localhost",
user="root",
passwd="password",
database="mydatabase"
)
# 创建用户表
mycursor = mydbcursor()
mycursorexecute("CREATE TABLE IF NOT EXISTS users (username VARCHAR(255), password VARCHAR(255))")
def login():
username = username_entryget()
password = password_entryget()
# 查询数据库中是否存在该用户
mycursorexecute("SELECT FROM users WHERE username = %s AND password = %s", (username, password))
result = mycursorfetchall()
if result:
status_labelconfig(text="Login successful")
else:
status_labelconfig(text="Invalid username or password")
def register():
username = username_entryget()
password = password_entryget()
# 查询数据库中是否存在相同用户名的用户
mycursorexecute("SELECT FROM users WHERE username = %s", (username,))
result = mycursorfetchall()
if result:
status_labelconfig(text="Username already exists")
else:
# 向数据库中插入新用户
mycursorexecute("INSERT INTO users (username, password) VALUES (%s, %s)", (username, password))
mydbcommit()
status_labelconfig(text="Registration successful")
def change_password():
username = username_entryget()
old_password = old_password_entryget()
new_password = new_password_entryget()
# 查询数据库中是否存在该用户以及旧密码是否正确
mycursorexecute("SELECT FROM users WHERE username = %s AND password = %s", (username, old_password))
result = mycursorfetchall()
if result:
# 更新数据库中的密码
mycursorexecute("UPDATE users SET password = %s WHERE username = %s", (new_password, username))
mydbcommit()
status_labelconfig(text="Password changed successfully")
else:
status_labelconfig(text="Invalid username or password")
# 创建主窗口
root = tkTk()
roottitle("Login System")
# 创建登录界面
login_frame = tkFrame(root)
login_framepack(pady=20)
username_label = tkLabel(login_frame, text="Username:")
username_labelgrid(row=0, column=0, padx=10, pady=10)
username_entry = tkEntry(login_frame)
username_entrygrid(row=0, column=1, padx=10, pady=10)
password_label = tkLabel(login_frame, text="Password:")
password_labelgrid(row=1, column=0, padx=10, pady=10)
password_entry = tkEntry(login_frame, show="")
password_entrygrid(row=1, column=1, padx=10, pady=10)
login_button = tkButton(login_frame, text="Login", command=login)
login_buttongrid(row=2, column=0, padx=10, pady=10)
register_button = tkButton(login_frame, text="Register", command=register)
register_buttongrid(row=2, column=1, padx=10, pady=10)
# 创建修改密码界面
change_password_frame = tkFrame(root)
change_password_framepack(pady=20)
old_password_label = tkLabel(change_password_frame, text="Old Password:")
old_password_labelgrid(row=0, column=0, padx=10, pady=10)
old_password_entry = tkEntry(change_password_frame, show="")
old_password_entrygrid(row=0, column=1, padx=10, pady=10)
new_password_label = tkLabel(change_password_frame, text="New Password:")
new_password_labelgrid(row=1, column=0, padx=10, pady=10)
new_password_entry = tkEntry(change_password_frame, show="")
new_passwordgrid(row=1, column=1, padx=10, pady=10)
change_password_button = tkButton(change_password_frame, text="Change Password", command=change_password)
change_password_buttongrid(row=2, column=0, padx=10, pady=10)
# 创建状态标签
status_label = tkLabel(root, text="")
status_labelpack(pady=10)
rootmainloop()
上述代码中的MySQL连接信息(host, user, passwd, database)需要根据实际情况进行修改
0条评论