Skip to content

大千世界无奇不有,大千AI智探万象

DeepSeek动手实践:创建一个自动连点器

deepseek作为国产开源大模型,其效果比肩OpenAI的GPT-4o。 想必你早就通过各家的chatbot体验过deepseek的对话能力了。 今天动手实践它的代码能力:动手创建一个连点器

注意:本工具仅限合法用途使用,请勿用于游戏作弊等违规场景

动手实践

Step1.生成连点器的代码逻辑

  • 提示词
使用python和tkinter和autopy生成一个带界面的连点器工具,可设置两次单击的时间间隔、总单击次数、单击时间间隔的随机delta、esc停止、单击启动按钮启动等功能
  • 响应代码部分(复制到文件autoclicker.py)
python
import tkinter as tk
from tkinter import ttk, messagebox
import autopy
import time
import random
import threading
import keyboard

class AutoClickerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("连点器工具")
        self.root.geometry("400x300")
        self.root.resizable(False, False)
        
        # 控制变量
        self.running = False
        self.click_thread = None
        
        # 创建UI
        self.create_widgets()
        
        # 绑定ESC键
        keyboard.add_hotkey('esc', self.stop_clicking)
    
    def create_widgets(self):
        # 主框架
        main_frame = ttk.Frame(self.root, padding="10")
        main_frame.pack(fill=tk.BOTH, expand=True)
        
        # 间隔时间设置
        ttk.Label(main_frame, text="单击间隔时间(秒):").grid(row=0, column=0, sticky=tk.W, pady=5)
        self.interval_var = tk.DoubleVar(value=0.5)
        ttk.Entry(main_frame, textvariable=self.interval_var, width=10).grid(row=0, column=1, sticky=tk.W, pady=5)
        
        # 随机变化范围
        ttk.Label(main_frame, text="随机变化范围(秒):").grid(row=1, column=0, sticky=tk.W, pady=5)
        self.delta_var = tk.DoubleVar(value=0.1)
        ttk.Entry(main_frame, textvariable=self.delta_var, width=10).grid(row=1, column=1, sticky=tk.W, pady=5)
        
        # 总点击次数
        ttk.Label(main_frame, text="总点击次数(0=无限):").grid(row=2, column=0, sticky=tk.W, pady=5)
        self.total_clicks_var = tk.IntVar(value=100)
        ttk.Entry(main_frame, textvariable=self.total_clicks_var, width=10).grid(row=2, column=1, sticky=tk.W, pady=5)
        
        # 点击类型
        ttk.Label(main_frame, text="点击类型:").grid(row=3, column=0, sticky=tk.W, pady=5)
        self.click_type_var = tk.StringVar(value="left")
        ttk.Combobox(main_frame, textvariable=self.click_type_var, 
                    values=["left", "right", "middle"], width=8).grid(row=3, column=1, sticky=tk.W, pady=5)
        
        # 状态显示
        self.status_var = tk.StringVar(value="准备就绪")
        ttk.Label(main_frame, textvariable=self.status_var).grid(row=4, column=0, columnspan=2, pady=10)
        
        # 按钮框架
        button_frame = ttk.Frame(main_frame)
        button_frame.grid(row=5, column=0, columnspan=2, pady=10)
        
        # 开始按钮
        self.start_button = ttk.Button(button_frame, text="开始", command=self.start_clicking)
        self.start_button.pack(side=tk.LEFT, padx=5)
        
        # 停止按钮
        self.stop_button = ttk.Button(button_frame, text="停止", command=self.stop_clicking, state=tk.DISABLED)
        self.stop_button.pack(side=tk.LEFT, padx=5)
        
        # 作者信息
        ttk.Label(main_frame, text="连点器工具 - 使用ESC键可随时停止").grid(row=6, column=0, columnspan=2, pady=10)
    
    def start_clicking(self):
        if self.running:
            return
            
        try:
            interval = float(self.interval_var.get())
            delta = float(self.delta_var.get())
            total_clicks = int(self.total_clicks_var.get())
            click_type = self.click_type_var.get()
            
            if interval <= 0:
                messagebox.showerror("错误", "间隔时间必须大于0")
                return
                
            if delta < 0:
                messagebox.showerror("错误", "随机变化范围不能为负数")
                return
                
            if total_clicks < 0:
                messagebox.showerror("错误", "总点击次数不能为负数")
                return
                
        except ValueError:
            messagebox.showerror("错误", "请输入有效的数字")
            return
            
        self.running = True
        self.start_button.config(state=tk.DISABLED)
        self.stop_button.config(state=tk.NORMAL)
        self.status_var.set("运行中...")
        
        # 在新线程中运行点击操作
        self.click_thread = threading.Thread(
            target=self.auto_click,
            args=(interval, delta, total_clicks, click_type),
            daemon=True
        )
        self.click_thread.start()
    
    def stop_clicking(self):
        if not self.running:
            return
            
        self.running = False
        self.status_var.set("已停止")
        self.start_button.config(state=tk.NORMAL)
        self.stop_button.config(state=tk.DISABLED)
    
    def auto_click(self, interval, delta, total_clicks, click_type):
        click_count = 0
        
        while self.running and (total_clicks == 0 or click_count < total_clicks):
            # 计算实际间隔时间
            actual_interval = interval + random.uniform(-delta, delta)
            actual_interval = max(0.01, actual_interval)  # 确保最小间隔为0.01秒
            
            # 执行点击
            try:
                if click_type == "left":
                    autopy.mouse.click(autopy.mouse.Button.LEFT)
                elif click_type == "right":
                    autopy.mouse.click(autopy.mouse.Button.RIGHT)
                elif click_type == "middle":
                    autopy.mouse.click(autopy.mouse.Button.MIDDLE)
                
                click_count += 1
                self.status_var.set(f"运行中... 已点击: {click_count}次")
            except Exception as e:
                self.status_var.set(f"错误: {str(e)}")
                self.running = False
                break
            
            # 等待间隔时间
            start_time = time.time()
            while self.running and (time.time() - start_time) < actual_interval:
                time.sleep(0.01)
        
        # 循环结束后更新状态
        if self.running:
            self.running = False
            self.status_var.set(f"已完成 {click_count}次点击")
            self.root.after(0, lambda: self.start_button.config(state=tk.NORMAL))
            self.root.after(0, lambda: self.stop_button.config(state=tk.DISABLED))

if __name__ == "__main__":
    root = tk.Tk()
    app = AutoClickerApp(root)
    root.mainloop()
    keyboard.unhook_all()  # 清理键盘钩子
  • 其他关键输出
    • 运行则需要安装相关依赖包 - pip install autopy keyboard

Step2.生成连点器的打包逻辑

  • 提示词(在Step1的基础上继续追问)
如何将该连点器打包成windows上的可执行文件,不依赖环境下是否有python环境
  • 响应代码部分(创建build.spec文件)
python
# build.spec
block_cipher = None

a = Analysis(
    ['autoclicker.py'],  # 你的主程序文件名
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='AutoClicker',  # 生成的exe名称
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,  # 设置为False可以隐藏控制台窗口
    icon='icon.ico',  # 可选:添加图标文件
)
  • 其他关键输出
    • 打包需要安装相关依赖包 - pip install pyinstaller
    • 打包命令 - pyinstaller build.spec

Step3.配置环境并打包

  • 1.打包运行依赖配置好的Python环境,去下载安装到本地即可

    • 可去官网下载 - https://www.python.org/getit/
  • 2.按Step1 和 Step2 的响应安装依赖包 pip install autopy keyboard pyinstaller

  • 3.按Step2 生成的 build.spec 文件的说明,需要一个图标文件(.ico格式),随便找一个ico格式的文件就可以,如果没有的话可以用 软件 格式工厂 进行转换生成

    • 这里就用 大千AI 的图标转换为 ico 格式的
  • 4.打包 pyinstaller build.spec

    • 等命令执行完成就在 dist 目录生成了一个名为 AutoClicker.exe 的文件(也就是我们的连点器)
  • 5.结果演示

    • 我这里将python文件中的 连点器工具 修改为了 连点器工具(By 大千AI助手)
  • 打包后的文件张这个样子

auto-clicker

  • 双击打开界面这个样子

auto-clicker-runtime

Reference

微信搜索 "大千AI助手" 学习最实用的AI技术

Last updated:

build with vitepress