1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python 实现模拟鼠标点击器 可运行 附源码

python 实现模拟鼠标点击器 可运行 附源码

时间:2022-01-21 09:05:05

相关推荐

python 实现模拟鼠标点击器 可运行 附源码

工具下载链接(网盘)

/s/1GIZPHQnRQqTD5h1Cy70MNQ?pwd=kxzz

一、前言:

对于一些比较肝的游戏,想要使用工具挂机;对于一些购物时的抢购,使用工具来帮自己点击抢购,解放双手;甚至当我们使用电脑时,有些情况下会强制跳出一些窗口,影响某些任务的进展,使用这个工具可以帮忙点击弹窗,关闭弹窗,使得任务继续,而不用人时刻盯在电脑旁点灭弹窗。

二、工具界面(超简单)

三、工具功能原理介绍

调用截图工具,截图保存想要模拟鼠标点击的地方的图片。比如想模拟鼠标点击一个弹窗的按钮,就可以把这个弹窗截图保存起来。工具运行时,会依次将保存的截图与现在屏幕的画面进行匹配,一旦匹配上相似度大于90%的画面时,会控制鼠标移动到指定的位置(匹配到的截图的中心位置,截图时中心位置会标记出来,所以截图时就已经确定了之后模拟点击的位置),然后点击一次,再将鼠标移动到原来的位置。使用者可以随时进行截图,工具运行时会一直重复匹配图像的过程

四、使用步骤

运行程序后会弹出询问窗口,简单介绍工具的使用方法,可以选择查看详细使用方法,也可以取消查看使用方法,直接使用工具。之后会在屏幕右下方会跳出工具界面,点击自动点击开始截图,选好截图区域后,按空格或回车键保存截图并运行工具。之后工具就根据截图匹配屏幕画面,内容相符时模拟鼠标点击(点击位置是截图区域的中心)

五、注意事项

对于打包成exe文件的小工具,使用时截图保存的图片不会自动删除,会保存在与exe文件同目录下。工具工作时会依次访问其同目录下的.png格式图片,用于匹配,所以第一次保存的截图如果不手动删除的话,第二次打开工具时会按照第一次的标准来识别,如果第二次想重新识别不同于第一次的内容,最好把第一次的截图删掉。(归根到底就是exe同目录下有哪些.png格式图片,工作时就会用那些.png图片匹配)。对于没有打包的.py源代码文件,使用者在自己电脑上运行时,一定不要把源代码文件和本地其他.png图片放在同一目录下。一是可能会影响工具的使用效率,二是停止运行程序后,程序会自动递归清除同目录下所有文件中的.png图片(回收站里找不到那种)。

六、项目源码

import tkinter,cv2,PIL,numpyfrom tkinter import messageboxfrom PIL import ImageDraw,ImageGrabimport osimport datetimeimport _threadimport pyautogui as pimport timeFLAG = True#创建窗口 def window():window=tkinter.Tk()window.protocol('WM_DELETE_WINDOW', delete_pictures)window.wm_attributes('-topmost',1)position_x=window.winfo_screenwidth()-150# window.geometry('%dx%d+%d+%d' % (100,30,(window.winfo_screenwidth()-100), (window.winfo_screenheight() - 100) ))window.geometry('%dx%d-%d-%d' % (120,30,0,50 ))window.resizable(width=False, height=False)button0=tkinter.Button(window, text="自动点击", command=button_command).pack()# window.focus_set()# button0.bind('<Button-2>', keyToButton) #按下s后,执行keyToButton函数,模拟点击按钮window.mainloop()#点击按钮后,截屏,并全屏显示 def button_command():mode=0mouse=Falseprint ('start here')global img,img_copy#filename = 'temp.png'im = ImageGrab.grab()#im.save(filename)#im.close()#im=pyautogui.screenshot()imgSize=im.size#font = ImageFont.truetype('song.ttf', int((imgSize[0])*0.025))draw = PIL.ImageDraw.Draw(im)#draw.text((imgSize[0]*0.7, (imgSize[1]*0.92)), '拖拽鼠标截图,敲回车键继续', (255,0,0), font=font)img=numpy.array(im)img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_copy=img.copy()#img = cv2.imread('1.png')cv2.namedWindow("ROI selector", cv2.WND_PROP_FULLSCREEN)cv2.setWindowProperty("ROI selector",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)r = cv2.selectROI(img_copy)imCrop = img_copy[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])]#cv2.imshow('new',imCrop)cv2.destroyAllWindows()#cv2.setMouseCallback('window_full',self.mouse_action)print ('mid here')now1=str(datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S"))cv2.imwrite(now1+'.png',imCrop)"""parameter:pic(png格式的图片)function:根据传进来的图片,在屏幕上匹配该图片,匹配不到时函数结束,否则,模拟鼠标点击匹配图片的中心位置,点击后将鼠标返回到鼠标原来的位置,函数成功匹配执行后睡眠5秒。"""def find_pic(pic):x0,y0=p.position() #记录当前鼠标位置;输出:Point(x=200, y=800)#position=p.locateCenterOnScreen(pic,confidence=0.9)# 使用函数:locateOnScreen(‘zan.png’) ,在当前屏幕中匹配zan.png,如果可以找到图片,则返回图片的位置,如:Box(left=25, top=703, width=22, height=22);如果找不到图片,则返回None;position = p.locateOnScreen(pic, confidence=0.9) # confidence=0.9 表示匹配的置信度为0.9,可以理解是相似度。if position is None:return Falseelse:#x,y=positionx,y,w,h=position # (x,y)为截图左上角坐标,w,h为截图的宽和高x=x+int(w/2)y=y+int(h/2)print(x,y) # 计算截图中心的坐标,模拟点击的位置就是截图中心的坐标p.moveTo(x,y)# 控制鼠标移动p.click() # 模拟鼠标点击p.moveTo(x0,y0) # 控制鼠标移动到一开始的位置time.sleep(5)return True"""parameter:无function:找出同目录的所有png格式的图片,并依次作为参数调用find_pic函数,用于匹配"""def pic():global FLAGwhile True:for w in os.listdir('./'):if w.endswith('.png') & FLAG == True:find_pic(w)"""parameter:无function:找出并删除同目录的所有png格式的图片,删除之后程序退出。"""def delete_pictures(): # 程序退出之后删除所有的png图片global FLAGFLAG = Falseprint(os.path.dirname(__file__))path = os.path.dirname(__file__)for root, dirs, files in os.walk(path):for name in files:if name.endswith(".png"): # 填写规则os.remove(os.path.join(root, name))print("Delete File: " + os.path.join(root, name))os._exit(0)if __name__=='__main__':root = tkinter.Tk()root.withdraw()result = messagebox.askquestion('使用方法提醒', '功能实现简述:会先截图,当程序运行时屏幕中再次出现和截图类似的画面时,会在匹配目标的画面范围中心模拟点击,每隔5s点一次。\n例如,选择模拟点击的弹窗时,弹窗截图应尽量精确,且截图的中心位置就是模拟点击的位置。\n''使用方法简述:阅完此消息,点确定按钮,会跳转到使用方法详细介绍,点取消按钮,屏幕右下方会跳出一小窗口,点击自动点击开始截图,之后按空格或回车键即可\n\n是否打开详细使用方法链接?')if result == 'yes':os.system('"C:/Program Files/Internet Explorer/iexplore.exe" /quxuexi/article/details/124972889?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165348401616782388091960%2522%252C%2522scm%2522%253A%25220713.130102334.pc%255Fall.%2522%257D&request_id=165348401616782388091960&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~times_rank-1-124972889-null-null.142^v10^control,157^v12^control&utm_term=python+%E5%AE%9E%E7%8E%B0%E6%A8%A1%E6%8B%9F%E9%BC%A0%E6%A0%87%E7%82%B9%E5%87%BB%E5%99%A8+%E5%8F%AF%E8%BF%90%E8%A1%8C+%E9%99%84%E6%BA%90%E7%A0%81&spm=1018.2226.3001.4187')# messagebox.showinfo(title='使用方法提醒', message='功能实现简述:会先截图,当程序运行时屏幕中再次出现和截图类似的画面时,会在匹配目标的画面范围中心模拟点击,每隔5s点一次。\n例如,选择模拟点击的弹窗时,弹窗截图应尽量精确,且截图的中心位置就是模拟点击的位置。\n'#'使用方法简述:阅完此消息,点确定按钮,屏幕右下方会跳出一小窗口,点击自动点击开始截图,之后按空格或回车键即可\n详细使用方法见链接:')_thread.start_new_thread( window, ())pic()delete_pictures() # 关闭软件后,自动清除之前使用时保存的截图os._exit()

七、项目依赖包

altgraph==0.17.2certifi==.5.18.1future==0.18.2importlib-metadata==4.11.4MouseInfo==0.1.3numpy==1.21.6opencv-python==4.5.5.64pefile==.9.3Pillow==9.1.1PyAutoGUI==0.9.53PyGetWindow==0.0.9pyHook @ file:///D:/%E6%A1%8C%E9%9D%A2/pyHook-1.5.1-cp37-cp37m-win_amd64.whlPyMsgBox==1.0.9pyperclip==1.8.2PyRect==0.2.0PyScreeze==0.1.28pytweening==1.0.4pywin32-ctypes==0.2.0typing_extensions==4.2.0wincertstore==0.2zipp==3.8.0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。