- 基于python的自动化脚本学习小结
- 一、实现思路
- 二、实现方法
- 三、具体步骤
- 1. 校园网自动连接
- 2. Bilibili直播自动发弹幕
最近利用python做了几个自动化脚本,学习了一些Web自动化的知识,为避免遗忘故做一个小结。 一、实现思路
基于python的自动化脚本制作思路如下:
- 选择要使用的自动化实现方法,使用pip install命令下载所需的python库
- 编写代码,实现脚本的功能
- 设计python的简易GUI界面
- 打包为.exe文件
实现python自动化脚本的可选方法
- python自动化方式(这里采用第2种方法)
(1)Playwright库可实现自动化操作浏览器。
Playwright可以使用如下代码直接录制浏览器操作生成python代码:
python -m playwright codegen --target python -o 文件名.py -b chromium 要操作的网址
(2)找到网站的接口,使用requests库模仿用户发送请求操作。
- python GUI(这里采用tkinter设计界面)
(1)tkinter(设计简单界面时用)
(2)wxpython
(3)pyqt - 打包为exe文件
使用python的自动化打包工具pyinstaller生成.exe文件
- 由于校园网用的是网页认证,手机连电脑的热点经常会断开网络连接,因此设计一个小脚本模拟用户认证登录操作。
- 抓包发现登录时本质是向服务器发送一个get请求,因此用脚本的核心功能是用requests库来模拟登录操作。
实现效果:
代码:
import socket, threading
from tkinter import *
from time import sleep
from requests import get
def is_net_ok():
s=socket.socket()
s.settimeout(3)
try:
status = s.connect_ex(('www.baidu.com',443))
if status == 0:
s.close()
return True
else:
return False
except Exception as e:
return False
def autologin():
while True:
if entry3.get()=='':
entry3.insert(END,'1')
pass
i = int(entry3.get())
if is_net_ok()==False:
a=0
username = entry1.get()
pwd = entry2.get()
i = entry3.get()
url = 'XXX'
Params={ "callback":"dr1003", "DDDDD": username,
"upass":pwd,"0MKKey":"123456"
}
Headers={'referer': 'XXX', "User-Agent": "XXX"}
response=get(url=url,params=Params,headers=Headers)
a += 1
text.insert(END, '第{}次尝试连接 间隔{}秒'.format(a,i))
else:
text.insert(END, '已接连到网络')
text.see(END)
text.update()
sleep(i)
class MyThread(threading.Thread):
def __init__(self, func, *args):
super().__init__()
self.func, self.args = func, args
self.setDaemon(True)
self.start() # 在这里开始
def run(self):
self.func(*self.args)
# 窗体界面
root = Tk()
root.title('自动连接校园网')
root.geometry('340x300')
root.resizable(width=False, height=False)
label1 = Label(root, text='请输入用户名:', font=('华文行楷', 16))
label1.grid()
entry1 = Entry(root, font=('隶书', 16), width=15)
entry1.grid(row=0, column=1)
label2 = Label(root, text='请输入密码:', font=('华文行楷', 16))
label2.grid()
entry2 = Entry(root, font=('隶书', 16), width=15)
entry2.grid(row=1, column=1)
label3 = Label(root, text='间隔(秒):', font=('华文行楷', 16))
label3.grid()
entry3 = Entry(root, font=('隶书', 16),width=15)
entry3.grid(row=2, column=1)
entry3.insert(END, '5')
text = Listbox(root, font=('隶书', 16), width=30, heigh=8)
text.grid(row=3, columnspan=2)
button1 = Button(root, text='自动连接', font=('隶书', 15), command=lambda :MyThread(autologin))
button1.grid(row=6, column=0)
button2 = Button(root, text='退出程序', font=('隶书', 15), command=lambda :MyThread(root.destroy))
button2.grid(row=6, column=1)
root.mainloop()
- 编写完代码后进行打包
- 先下载python的打包工具pyinstaller
pip install pyinstaller - 再cd 进入…Python38Scripts文件夹
- 最后使用命令pyinstaller -F -w -i 图标名.ico 脚本名.py打包脚本
- 由于B站的弹幕游戏比较热门,但发送弹幕比较麻烦,所以制作脚本模拟用户发送弹幕,先通过按F12进入调试界面发送一条弹幕后找到b站发送弹幕的接口send,发现发送的是POST请求,如下图所示:
2. 获取接口信息后再用requests库来模拟发送弹幕就可以了,代码与上面类似。
实现效果:
- 基于python的自动化脚本实现
to be continued
how
2022/5/25



