吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 159|回复: 7
上一主题 下一主题
收起左侧

[Python 原创] Python自制自动连点器

  [复制链接]
跳转到指定楼层
楼主
Stephen库里 发表于 2024-11-26 15:54 回帖奖励
本帖最后由 Stephen库里 于 2024-11-27 16:20 编辑

最近玩雷霆战机,但是金币又很少,百度搜了看可以用自动连点器刷无尽,但是我手机不可能24小时挂着,模拟器又需要把微信退出去,就找pc版的连点器吧,找了好几个都要RMB,GitHub上也少,就自己用py写一个吧,简简单单,可以定时,多点位就能满足,下面贴上代码和运行效果:

更新了2.0版本,修改ui界面附上地址:
https://wwxv.lanzoul.com/b0foy0e9c
密码:2f5o


[Python] 纯文本查看 复制代码
# -*- coding: utf8 -*-
import time,re,os,pickle
import tkinter as tk
from tkinter import messagebox,ttk
import pyautogui
import keyboard
import logging
import threading

# 初始化一个空列表来保存坐标点
coordinates = []
# 声明一个全局变量,用于控制循环的启动和停止
is_running = False
click_count = 0  # 循环计数器
clickNum = 0 # 标记

# 设置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def get_mouse_position():
    global clickNum
    x, y = pyautogui.position()
    coordinates.append((x, y))
    update_message(f"{x}, {y}\n")

# 清空信息
def clear():
    global click_count
    #清空已获取的坐标点
    entry1.delete(0, tk.END)
    entry2.delete(0, tk.END)
    coordinates.clear()
    is_running = False
    click_count = 0  # 循环计数器
    message.config(state='normal')  # 确保Text组件是可编辑的
    message.delete('1.0', tk.END)  # 删除从第一行第一个字符到最后一个字符的所有内容
    message.config(state='disabled')  # 清空后再次设置为禁止输入状态
    # 清空并删除已保存到文件里的数据
    messagebox.showinfo("信息","所有数据已清空")

# 启动连点
def startClickThread():
    global is_running,click_count
    seconds1 = float(entry1.get())
    seconds2 = float(entry2.get())
    while is_running:
        try:
            # 遍历coordinates列表中的每个坐标点
            for x, y in coordinates:
                # 移动鼠标到坐标点(x, y)
                pyautogui.moveTo(x, y)
                # 模拟鼠标点击
                pyautogui.click()
                time.sleep(seconds2)
            # 一轮循环完成,增加计数器
            click_count += 1
            current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            update_message(f"{current_time}  第 {click_count} 次循环结束\n")
            # 等待-秒
            time.sleep(seconds1)
        except pyautogui.FailSafeException:
            update_message("操作取消,因为鼠标移动到了屏幕角落。\n")
            is_running = False
        except Exception as e:
            logging.error(f"发生错误:{e}")
            is_running = False

# 启动或停止
def startOrStop():
    global is_running
    if check_empty():
        # 如果两者都为空,则不执行任何操作
        messagebox.showwarning("警告", "时间和坐标列表都不能为空!\n")
        return
    if not is_running:
        is_running = True
        update_message("-----启动连点,当前每 {} 秒点击一次-----\n".format(entry2.get()))
        threading.Thread(target=startClickThread).start()  # 使用线程启动连点操作
    else:
        is_running = False
        update_message("-----停止连点-----\n")

def check_empty():
    # 检查entry1,entry2是否为空
    if entry1.get().strip() == "" or entry2.get().strip() == "":
        return True
    if len(coordinates) == 0:
        return True
    return False

def update_message(message_text):
    def safe_update():
        message.config(state='normal')
        message.insert(tk.END, message_text)
        message.config(state='disabled')
        # 滚动到最底部
        message.yview(tk.END)
    root.after(0, safe_update)

# 监听F6键
keyboard.add_hotkey('f6', get_mouse_position)
# 监听F7键
keyboard.add_hotkey('f7', startOrStop)

# 创建主窗口
root = tk.Tk()

# 获取屏幕宽度和高度
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
# 获取窗口的宽度和高度
win_width = 650  # 假设窗口宽度为650像素
win_height = 400  # 假设窗口高度为400像素
# 计算窗口在屏幕上的位置
x = (screen_width / 2) - (win_width / 2)
y = (screen_height / 2) - (win_height / 2)
# 设置窗口的位置
root.geometry(f'{win_width}x{win_height}+{int(x)}+{int(y)}')

# 获取当前脚本的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))

# 构建图标文件的绝对路径
icon_path = os.path.join(script_dir, 'config', 'click.png')
win_image = tk.PhotoImage(file='.\\config\\click.png')
root.iconphoto(False, win_image)
root.title("自动连点器")
root.geometry("650x400")
# 创建标签
label = tk.Label(root, text="按下F6获取当前鼠标坐标")
label.pack(pady=10)

# 下一个大循环
frame1 = tk.Frame(root)
frame1.pack(fill=tk.X, expand=True)
label1 = tk.Label(frame1, text="距离下一个循环点击时间:")
label1.pack(side=tk.LEFT, fill=tk.X, padx=(20, 10))
entry1 = tk.Entry(frame1, width=10)
entry1.pack(side=tk.LEFT, fill=tk.X, expand=True)
label2 = tk.Label(frame1, text="s/秒")
label2.pack(side=tk.LEFT, fill=tk.X, padx=(20, 10))

# 下一次点击
frame2 = tk.Frame(root)
frame2.pack(fill=tk.X, expand=True)
label3 = tk.Label(frame2, text="距离下一个点击时间:")
label3.pack(side=tk.LEFT, fill=tk.X, padx=(20, 10))
entry2 = tk.Entry(frame2, width=10)
entry2.pack(side=tk.LEFT, fill=tk.X, expand=True)
label4 = tk.Label(frame2, text="s/秒")
label4.pack(side=tk.LEFT, fill=tk.X, padx=(20, 10))


# 创建按钮
frame5 = tk.Frame(root)
frame5.pack(fill=tk.X, expand=True)
button1 = tk.Button(frame5, text="清空", command=clear)
button1.pack(side=tk.LEFT, fill=tk.X, expand=True)
button2 = tk.Button(frame5, text="启动/停止(F7)", command=startOrStop)
button2.pack(side=tk.LEFT, fill=tk.X, expand=True)

# 创建一个Label用于显示信息
message = tk.Text(root, state='disabled')
message.pack(fill=tk.BOTH, expand=True,padx=5, pady=5)

# 运行主循环
root.mainloop()
keyboard.wait()

7c1581742279a05d5f2af4de2b34f32.png (32.48 KB, 下载次数: 0)

7c1581742279a05d5f2af4de2b34f32.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
zfb38 发表于 2024-11-27 08:57
悬赏区不是有人需要这东东
3#
aosikaiii 发表于 2024-11-27 09:50
4#
 楼主| Stephen库里 发表于 2024-11-27 11:43 |楼主
zfb38 发表于 2024-11-27 08:57
悬赏区不是有人需要这东东

没看到,最近做2.0,功能没变化页面改了
5#
hsmx77 发表于 2024-11-27 13:11
不错不错,是不是可以用来搞抢购
6#
 楼主| Stephen库里 发表于 2024-11-27 14:27 |楼主
hsmx77 发表于 2024-11-27 13:11
不错不错,是不是可以用来搞抢购

单纯点击,抢购看个人能不能用吧
7#
yxf515321 发表于 2024-11-27 21:59
楼主大气哇
8#
吖力锅 发表于 2024-11-27 22:42
是个高手
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 05:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表