鼠标连点器
操作说明
环境依赖
- 有python
- 有pyautogui
# 安装pyautogui命令 pip3 install pyautogui
警告
- 仅在windows进行了测试
- 两次连续的单击左键会变成双击左键
因为使用了pyautogui内部默认的延时 - 若不支持pyautogui,不提供解决方案
运行示例
示例一:执行5次点击左键
示例二:先点击左键,再点击右键(执行5次)
运行流程
流程
- 解析参数
- 生成鼠标操作列表
- 生成鼠标点击的位置列表
- 开始执行点击命令
主函数
def main():
"""主函数"""
try:
args = ArgParse() # 解析参数
clickList = GetClickList(args.num) # 生成鼠标操作列表
positionList = GetPositionList(args.num) if args.move else None # 生成鼠标点击的位置列表
RunClick(clickList, positionList, args.repeat) # 开始执行点击命令
except Exception as e:
print(f'Error: {e}')
功能模块
参数解析
解析输入参数,支持的命令有:
- 配置单次运行执行的鼠标操作数量:-n或–num后跟数字
- 配置重复运行的次数:-r或–repeat后跟数字
- 配置是否需要移动鼠标:-m或–move, 默认不移动,加了之后移动
def ArgParse():
"""命令行参数解析"""
import argparse
parser = argparse.ArgumentParser(description='Click mouse')
parser.add_argument('-n', '--num', type=int, help='Number of click commands')
parser.add_argument('-r', '--repeat', type=int, help='Number of repeat times')
parser.add_argument('-m', '--move', action='store_true', default=False, help='Move mouse to position before clicking')
args = parser.parse_args()
# 参数校验
if args.num is None or args.num <= 0:
raise ValueError('Invalid or missing click command number (--num)')
if args.repeat is None or args.repeat <= 0:
raise ValueError('Invalid or missing repeat times (--repeat)')
return args
生成鼠标操作列表
依次输入执行的鼠标操作,输入错误则重新输入
def GetClickList(num):
"""获取点击命令列表"""
print('Select your clock command:')
print('1: click left')
print('2: click left double')
print('3: click right')
clickOption = {
1: pyautogui.click,
2: pyautogui.doubleClick,
3: pyautogui.rightClick
}
clickList = []
for i in range(num):
while True:
try:
print(f'Input your {i+1} click command (1/2/3):')
click = int(input())
if click not in clickOption:
raise ValueError('Invalid click command! Please input 1, 2, or 3.')
clickList.append(clickOption[click])
break
except ValueError as e:
print(f'Error: {e}')
return clickList
生成鼠标点击的位置列表
当配置了需要鼠标移动时,生成点击位置列表。每按一次回车,获取一个位置。
def GetPositionList(num):
"""获取点击位置列表"""
positionList = []
for i in range(num):
print(f'Get your {i+1} click position: Press Enter to capture the current mouse position.')
input()
x, y = pyautogui.position()
positionList.append((x, y))
return positionList
开始点击
def RunClick(clickList, positionList, repeat):
"""运行点击命令"""
for i in range(repeat):
for j in range(len(clickList)):
if positionList is not None:
pyautogui.moveTo(positionList[j][0], positionList[j][1])
clickList[j]() # 执行点击命令
print(f'Run {i+1}/{repeat} times')