导语:
本文主要介绍了关于Python如何使用tkinter编写GUI程序的相关知识,希望可以帮到处于编程学习途中的小伙伴
@(Python3中tkinter写的HTTP测试工具代码支持正则表达式和XPATH)
该程序非常简单。暂时只支持GET方式。内置库 tkinter 用于编写 GUI 窗口。 Mac下运行的效果图如下。在Windows上运行时,需要更改控件的宽高等控件参数才能正常显示。
效果图(使用XPATH匹配房天下网站)
代码如下,需要安装requests和lxml第三方库
app.py.
import tkinter as tk
from tkinter import scrolledtext
from tkinter import messagebox
import re
import requests
from lxml import etree
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
#bar
self.canvas = tk.Canvas(self,width=980,height=65,bg='#ebf4ec')
self.image_file = tk.PhotoImage(file='network.png')
self.imag = self.canvas.create_image(50,0,anchor='n',image=self.image_file)
self.canvas.create_text(480,35,text='HTTP测试工具',font=('Arial',35),)
self.canvas.grid(row=0,columnspan=3)
#method HTTP方法多选框
self.var_method = tk.StringVar(self)
self.var_method.set('GET')
self.optionmenu = tk.OptionMenu(self,self.var_method,'GET','POST','PUT','PATCH','DELETE','HEAD','OPTIONS')
.grid(row=1,column=0,padx=2,pady=2,ipadx=10,ipady=5)
#url
self.var_url = tk.StringVar(self)
self.var_url.set('http://')
self.url_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_url).grid(row=1,column=1,
padx=1,pady=2,ipadx=10,ipady=5)
#request button
self.request_button = tk.Button(self, text='发送请求', fg='#436EEE', command=self.request).grid(row=1,
column=2,padx=2,pady=2,ipadx=10,ipady=5)
#request header
self.header_label = tk.Label(self,text='请求头:').grid(row=3,column=0,padx=2,pady=2,ipadx=10,ipady=5)
self.var_header = tk.StringVar(self)
self.var_header.set('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:64.0) Gecko/20100101 Firefox/64.0')
self.header_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_header).grid(row=3,
column=1,padx=2,pady=2,ipadx=10,ipady=5)
#regular expression
self.re_header = tk.Label(self,text='正则表达式:').grid(row=4,column=0,padx=2,pady=2,ipadx=10,ipady=5)
self.var_re = tk.StringVar(self)
self.re_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_re).grid(row=4,column=1,
padx=2,pady=2,ipadx=10,ipady=5)
self.re_button = tk.Button(self, text='匹配全部',command=self.re_request).grid(row=4,column=2,padx=2,
pady=2,ipadx=10,ipady=5)
#xpath
self.xpath_label = tk.Label(self,text='Xpath表达式:').grid(row=5,column=0,padx=2,pady=2,ipadx=10,ipady=5)
self.var_xpath = tk.StringVar(self)
self.xpath_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_xpath).grid(row=5,
column=1,padx=2,pady=2,ipadx=10,ipady=5)
self.xpath_button = tk.Button(self, text='匹配全部',command=self.xpath_request).grid(row=5,column=2,padx=2,
pady=2,ipadx=10,ipady=5)
#information
self.var_status = tk.StringVar()
self.var_status.set('当前状态:未请求')
self.information = tk.Label(self,textvariable=self.var_status,bg='#48D1CC',font=('Arial',14)).grid(row=6,
column=1, padx=2, pady=2, ipadx=10, ipady=5)
#results
self.textarea = tk.scrolledtext.ScrolledText(self,width=117,height=25,bg='black',fg='#00EE00',
font=('Arial',14))
self.textarea.grid(row=7,columnspan=3,pady=10)
#xpath匹配
def xpath_request(self):
xpath = self.var_xpath.get()
if xpath == '':
messagebox.showinfo('警告', message='请输入XPATH表达式!')
else:
url = self.var_url.get()
header = self.var_header.get()
headers = {'User-Agent':header}
data = requests.get(url=url,headers=headers).text
results = etree.HTML(data).xpath(xpath)
self.textarea.delete('1.0', 'end')
for i in results:
self.textarea.insert('end',i.text + '\n')
#正则表达式匹配
def re_request(self):
exp = self.var_re.get()
if exp == '':
messagebox.showinfo('警告',message='请输入正则表达式!')
else:
url = self.var_url.get()
header = self.var_header.get()
headers = {'User-Agent':header}
data = requests.get(url=url,headers=headers).text
results = re.compile(exp).findall(data)
self.textarea.delete('1.0', 'end')
self.textarea.insert('end',results)
def request(self):
method = self.var_method.get()
if method == 'GET':
self.get_request()
elif method == 'POST':
self.post_request()
def post_request(self):
pass
#还没写
#发送HTTP GET请求
def get_request(self):
self.textarea.delete('1.0','end')
if self.var_header.get() == '':
headers = {'User-Agent':''}
else:
headers = {'User-Agent':self.var_header.get()}
url = self.var_url.get()
data = requests.get(url=url,headers=headers)
if (data.status_code == 200):
self.var_status.set('当前状态:'+ 'GET ' + url + ' '+ str(data.status_code)+' OK')
elif (data.status_code == 404):
self.var_status.set('当前状态:' + str(data.status_code) + ' Not found')
else:
self.var_status.set('当前状态:' + str(data.status_code))
content = data.text
self.textarea.insert('end',content)
if __name__ == '__main__':
root = tk.Tk()
root.title('KK HTTP测试工具')
root.geometry('980x700')
app = Application(master=root)
app.mainloop()
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ c语言或python哪个更容易08/21
- ♥ 如何输入python多行代码10/07
- ♥ 为什么 Python 书籍使用蛇作为封面11/16
- ♥ 如何使用python堆排序?12/27
- ♥ Python中的垃圾回收机制是什么11/15
- ♥ 如何使用python函数定义09/10
内容反馈