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='欢迎使用 Fiddler Classic 定时执行脚本程序!')
    label.pack(pady=10)

    self.seconds_var = tk.StringVar(value='10')

    seconds_label = tk.Label(self.window, text='请输入定时执行的时间间隔(秒):')
    seconds_label.pack()

    self.seconds_entry = tk.Entry(self.window, textvariable=self.seconds_var)
    self.seconds_entry.pack(pady=5)

    countdown_label = tk.Label(self.window, text='')
    countdown_label.pack(pady=5)

    success_var = tk.StringVar(value='执行成功0次')
    success_label = tk.Label(self.window, textvariable=success_var)
    success_label.pack(pady=5)

    failure_var = tk.StringVar(value='执行失败0次')
    failure_label = tk.Label(self.window, textvariable=failure_var)
    failure_label.pack(pady=5)

    start_button = tk.Button(
        self.window,
        text='开始执行',
        command=lambda: start_script(
            self.seconds_var.get(),
            countdown_label,
            success_var,
            failure_var
        )
    )
    start_button.pack(pady=10)

    stop_button = tk.Button(
        self.window,
        text='停止运行',
        command=lambda: stop_script(countdown_label)
    )
    stop_button.pack(pady=10)

    self.stop_flag = False
    self.running_flag = False

    self.window.mainloop()

def run(self):
    # 启动界面的事件循环
    self.window.mainloop()

实例化 FiddlerApp 类并运行界面

app = FiddlerApp() app.run()

Fiddler Classic 定时清除请求脚本 - 自动化工具

原文地址: https://www.cveoy.top/t/topic/qg3K 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录