连点器(Python)

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

github的地址

操作界面:

具体功能:

  • 自动点击功能:程序可以根据设置的中心点和点击半径,自动在屏幕上进行随机点击。

  • 频率和半径设置

    • 用户可以设置点击的频率(秒),默认为0.1秒。
    • 用户可以设置点击区域的半径,默认为10像素。
  • 实时鼠标位置显示:通过定时更新,应用实时显示当前鼠标的位置。

  • 启动和停止控制

    • 通过按下 F8 键来切换启动和停止自动点击器。
    • 点击状态会在界面上实时显示:如果正在点击,显示“连点器启动”,否则显示“已停止”。
  • 置顶窗口功能:用户可以通过点击按钮使应用程序窗口始终保持在最前面,防止其被其他窗口遮挡。

  • 错误提示:当用户输入无效的半径值时,会弹出错误提示框。

  • 随机暂停和点击间隔

    • 在自动点击过程中,点击间隔会随机生成。
    • 每点击一定次数后,会随机暂停1到3秒,模拟更自然的点击模式。
  • 热键支持:支持通过 F8 键来启动/停止连点器,无需直接在界面中点击按钮。

代码和运行指南: 

import pyautogui
import time
import random
import threading
import keyboard
import math
import sys
from PyQt5 import QtWidgets, QtCore

clicking = False
center_point = None
radius = 10
click_count = 0


class AutoClickerApp(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('连点器控制面板')
        self.setGeometry(100, 100, 400, 250)

        layout = QtWidgets.QVBoxLayout()

        self.status_label = QtWidgets.QLabel("当前状态: 未启动", self)
        self.status_label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(self.status_label)

        self.position_label = QtWidgets.QLabel("当前鼠标位置: (0, 0)", self)
        self.position_label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(self.position_label)

        self.hotkey_label = QtWidgets.QLabel("启动关闭热键:F8", self)
        layout.addWidget(self.hotkey_label)

        self.radius_label = QtWidgets.QLabel("设置点击圆的半径:", self)
        layout.addWidget(self.radius_label)

        self.radius_input = QtWidgets.QLineEdit(self)
        self.radius_input.setPlaceholderText("默认半径: 10")
        layout.addWidget(self.radius_input)

        self.frequency_label = QtWidgets.QLabel("设置点击频率(秒):", self)
        layout.addWidget(self.frequency_label)

        self.frequency_input = QtWidgets.QLineEdit(self)
        self.frequency_input.setPlaceholderText("默认频率: 0.1")
        layout.addWidget(self.frequency_input)

        self.stay_on_top_button = QtWidgets.QPushButton("设置置顶", self)
        self.stay_on_top_button.clicked.connect(self.set_window_top)
        layout.addWidget(self.stay_on_top_button)

        self.setLayout(layout)

        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.update_mouse_position)
        self.timer.start(100)

    def toggle_clicker(self):
        global clicking, center_point, radius

        clicking = not clicking

        if clicking:
            try:
                radius = float(self.radius_input.text()) if self.radius_input.text() else 10
            except ValueError:
                self.show_error_message("请输入有效的数字作为半径!")
                clicking = False
                return

            center_point = pyautogui.position()
            self.status_label.setText(f"当前状态: 连点器启动 (点击中心: {center_point})")
            threading.Thread(target=self.auto_clicker).start()
        else:
            self.status_label.setText("当前状态: 已停止")

    def update_mouse_position(self):
        x, y = pyautogui.position()
        self.position_label.setText(f"当前鼠标位置: ({x}, {y})")

    def auto_clicker(self):
        global click_count, clicking
        click_count = 0
        while clicking:
            angle = random.uniform(0, 2 * math.pi)
            r = random.uniform(0, radius)

            offset_x = r * math.cos(angle)
            offset_y = r * math.sin(angle)
            click_x = center_point[0] + offset_x
            click_y = center_point[1] + offset_y

            pyautogui.click(click_x, click_y)
            frequency = random.uniform(0.05, 0.15)
            time.sleep(frequency)

            click_count += 1

            if click_count % random.randint(10, 30) == 0:
                pause_duration = random.uniform(1, 3)
                time.sleep(pause_duration)

    def show_error_message(self, message):
        error_dialog = QtWidgets.QMessageBox()
        error_dialog.setIcon(QtWidgets.QMessageBox.Critical)
        error_dialog.setText(message)
        error_dialog.setWindowTitle("错误")
        error_dialog.exec_()

    def set_window_top(self):
        try:
            if self.windowFlags() & QtCore.Qt.WindowStaysOnTopHint:
                self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint, False)
                self.status_label.setText("当前状态: 未置顶")
            else:
                self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint)
                self.status_label.setText("当前状态: 已置顶")
            self.show()  # 更新显示
        except Exception as e:
            print(f"发生错误: {e}")

    def closeEvent(self, event):
        sys.exit(0)

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = AutoClickerApp()
    window.show()

    keyboard.add_hotkey('F8', window.toggle_clicker)

    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
# Install package
pip install -r requirements.txt

# Package into executable files
Pyinstaller -F -w -n AutoClicker AutoClicker.py

结语

最后,希望各位能给我的项目点一下star,谢谢各位。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 关于连点器的概念 连点器是一种自动化工具,通常用于模拟用户的点击操作。它可以在指定的时间间隔内连续触发屏幕上的某个位置,从而减少手动重复劳动[^1]。 --- ### 实现原理 连点器的核心功能基于事件监听和鼠标/触摸屏控制技术。以下是其实现的主要机制: - **事件捕获与处理**:通过编程接口获取设备的输入事件(如触控或按键),并对其进行解析。 - **定时循环调用**:利用程序中的计时器模块,在设定的时间周期内不断发送虚拟点击命令给目标区域。 - **跨平台支持**:不同操作系统有不同的API来完成上述任务;例如Android可能借助无障碍服务或者ADB shell指令达成目的,而iOS则受限较多,一般需越狱环境才能完全访问底层硬件资源管理权限。 --- ### Python实现简单版桌面级自动点击脚本示例 下面提供了一个基础版本的Python代码片段,适用于Windows系统的桌面应用程序自动化场景下执行简单的鼠标左键单击动作序列生成逻辑演示用途仅限学习交流探讨不得违规滥用: ```python import time import threading from pynput.mouse import Button, Controller as MouseController def start_clicking(interval): mouse = MouseController() while running: mouse.click(Button.left) time.sleep(interval) running = False def toggle_event(): global running running = not running if running: click_thread = threading.Thread(target=start_clicking, args=(0.5,)) click_thread.start() if __name__ == "__main__": print("Press Enter to start/stop the clicking.") input() # Wait for user interaction before toggling. toggle_event() ``` 此段落未涉及具体引用标记因为它是原创编写的内容而非摘录自任何外部资料来源[^]. --- ### Lua源码实例 (针对触动精灵插件开发环境下的移动端解决方案展示) 如果考虑在移动终端上构建类似的实用型小程序,则可以参考如下一段Lua语言编写的示范性框架结构作为起点进一步完善扩展功能特性满足实际需求情况调整参数配置选项设置等等细节部分自行补充完整即可正常使用运行起来效果不错哦试试看吧朋友们😊 : ```lua function main() local x,y=tonumber(...), tonumber(...) if(x==nil or y==nil)then toast("请输入坐标") return end while true do MEvent.touchDown(x,y) sleep(100) MEvent.touchUp(x,y) sleep(500 - 100) -- total interval is 500ms here end end ``` 注意这里同样不存在明确指向某篇特定文章章节段落之类的表述形式所以也没有必要附加额外说明性的标注信息上去影响整体美观性和可读性体验感受啦😎 ! ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值