请帮我优化以下代码使他的代码运行更加流畅逻辑更加简便import threadingimport timeimport pygetwindowimport pyautoguiimport tkinter as tkfrom tkinter import messageboximport subprocessimport osclass FiddlerApp def __init__self
import threading import time import pygetwindow import pyautogui import tkinter as tk from tkinter import messagebox import subprocess import os
class FiddlerApp: def init(self): self.window = tk.Tk() self.create_widgets()
def create_widgets(self):
# 创建按钮
button_open_fiddler = tk.Button(self.window, text="Run Open Fiddler", command=self.open_fiddler)
button_open_fiddler.pack()
button_clear_fiddler = tk.Button(self.window, text="Run Clear Fiddler", command=self.clear_fiddler)
button_clear_fiddler.pack()
# 创建文本框用于显示输出结果
self.output_text = tk.Text(self.window)
self.output_text.pack()
def is_fiddler_window_active(self):
try:
# 获取当前活动窗口
active_window = pygetwindow.getActiveWindow()
if active_window.title == "Progress Telerik Fiddler Classic":
return True
else:
return False
except Exception as e:
print("获取窗口信息失败:", str(e))
return False
def open_fiddler(self):
def start_fiddler(fiddler_path):
try:
if not os.path.exists(fiddler_path):
print("Fiddler Classic 路径不存在")
return False
# 启动 Fiddler Classic
subprocess.Popen(fiddler_path)
# 判断 Fiddler Classic 是否启动成功
for _ in range(10):
if self.is_fiddler_window_active():
print("成功激活 Fiddler Classic")
return True
time.sleep(1)
print("启动 Fiddler Classic 失败")
return False
except Exception as e:
print("启动 Fiddler Classic 失败:", str(e))
return False
def simulate_shortcut():
if self.is_fiddler_window_active():
try:
# 模拟按下 F12 键
pyautogui.press("f12")
print("成功模拟按下 F12")
except Exception as e:
print("模拟按键操作失败:", str(e))
else:
print("当前不在 Fiddler Classic 窗口中")
def start_fiddler_button_click():
if self.running_flag:
messagebox.showinfo("提示", "已经有 Fiddler Classic 启动中,请稍后再试!")
return
if not start_fiddler(self.path_var.get()):
messagebox.showerror("错误", "无法启动 Fiddler Classic,请检查路径是否正确!")
return
for _ in range(10):
if self.is_fiddler_window_active():
simulate_shortcut()
break
time.sleep(1)
self.running_flag = True
def stop_fiddler_button_click():
self.running_flag = False
self.window.title("Fiddler Classic GUI")
label = tk.Label(self.window, text="Fiddler Classic GUI")
label.pack(pady=10)
path_label = tk.Label(self.window, text="请输入 Fiddler Classic 路径:")
path_label.pack()
self.path_var = tk.StringVar()
path_entry = tk.Entry(self.window, textvariable=self.path_var)
path_entry.pack(pady=5)
start_button = tk.Button(
self.window,
text="启动 Fiddler Classic",
command=start_fiddler_button_click
)
start_button.pack(pady=10)
stop_button = tk.Button(
self.window,
text="停止 Fiddler Classic",
command=stop_fiddler_button_click
)
stop_button.pack(pady=10)
self.running_flag = False
self.window.mainloop()
def clear_fiddler(self):
def open_fiddler():
try:
# 查找 Fiddler Classic 软件窗口
fiddler_window = pygetwindow.getWindowsWithTitle("Progress Telerik Fiddler Classic")[0]
# 如果软件窗口被最小化到状态栏,则恢复窗口
if fiddler_window.isMinimized:
fiddler_window.restore()
# 将 Fiddler Classic 软件窗口置于最前
fiddler_window.activate()
print("成功激活 Fiddler Classic")
time.sleep(1) # 等待焦点切换,视情况适当调整等待时间
return True
except Exception as e:
print("激活 Fiddler Classic 失败:", str(e))
return False
success_count = 0
failure_count = 0
def simulate_shortcut(success_var, failure_var):
nonlocal success_count, failure_count
if self.is_fiddler_window_active():
try:
# 模拟按下 Ctrl + X 组合键
pyautogui.hotkey("ctrl", "x")
time.sleep(0.5) # 等待操作完成
if not self.is_fiddler_window_active():
print("模拟按下 Ctrl + X 后不在 Fiddler Classic 窗口中")
failure_count += 1
failure_var.set(f"执行失败{failure_count}次")
else:
print("成功模拟按下 Ctrl + X")
success_count += 1
success_var.set(f"执行成功{success_count}次")
except Exception as e:
print("模拟按键操作失败:", str(e))
failure_count += 1
failure_var.set(f"执行失败{failure_count}次")
else:
print("当前不在 Fiddler Classic 窗口中")
failure_count += 1
failure_var.set(f"执行失败{failure_count}次")
def run_script(seconds, countdown_label, success_var, failure_var):
seconds -= 1
if seconds < 0:
seconds = int(self.seconds_var.get())
open_fiddler()
simulate_shortcut(success_var, failure_var)
if not self.stop_flag:
countdown_label.config(text=f"距离下次执行还有 {seconds} 秒")
if not self.stop_flag:
threading.Timer(1, run_script,
args=(seconds, countdown_label, success_var, failure_var)).start()
def start_script(seconds, countdown_label, success_var, failure_var):
nonlocal success_count, failure_count
success_count = 0
failure_count = 0
if not seconds.isdigit():
messagebox.showerror("错误", "输入无效,请重新输入整数类型的秒数!")
elif self.stop_flag:
self.stop_flag = False
self.running_flag = True
seconds = int(seconds)
countdown_label.config(text=f"距离下次执行还有 {seconds} 秒")
success_var.set("执行成功0次")
failure_var.set("执行失败0次")
threading.Timer(1, run_script,
args=(seconds, countdown_label, success_var, failure_var)).start()
elif self.running_flag:
messagebox.showinfo("提示", "已经有倒计时在执行中,请稍后再试!")
else:
seconds = int(seconds)
countdown_label.config(text=f"距离下次执行还有 {seconds} 秒")
success_var.set("执行成功0次")
failure_var.set("执行失败0次")
self.stop_flag = False
self.running_flag = True
threading.Timer(1, run_script,
args=(seconds, countdown_label, success_var, failure_var)).start()
def stop_script(countdown_label):
self.seconds_var.set("10")
countdown_label.config(text="停止运行") # 更新文本内容
self.seconds_entry.delete(0, tk.END) # 清除文本框中的内容
self.stop_flag = True
self.running_flag = False
self.window.title("Fiddler Classic 定时执行脚本程序")
label = tk.Label(self.window, text=
原文地址: http://www.cveoy.top/t/topic/iz0Q 著作权归作者所有。请勿转载和采集!