Python 自动化办公之自动识别并点击按钮

前言

遇到一个需要电脑的体力劳动,找到了Python控制鼠标的库,结合之前用过的OpenCV识别可以屏幕内容,可以实现略微复杂的自动化办公操作。

过程

安装用到的库

安装方法作用
pillowpip install pillow加载图片
pyscreezepip install pyscreeze截屏
pyautoguipip install pyautogui代码操作鼠标键盘
opencv-pythonpip install opencv-python识别并匹配图片

使用pyautogui自动点击按钮

检查屏幕上是否有某个按钮,有的话就点击

from time import sleep
import pyautogui
from PIL import ImageGrab, Image

#事先对按钮截图
zhengnengliangImg= Image.open("zhengnengliang.png")
#截图当前屏幕并找到之前加载的按钮截图
msg = pyautogui.locateOnScreen(zhengnengliangImg, grayscale=True,confidence=.9)
if msg==None: 
	print ("没找到")
else:
	x,y,width,height=msg
	print ("该图标在屏幕中的位置是:X={},Y={},宽{}像素,高{}像素".format(x,y,width,height))
	#左键点击屏幕上的这个位置
	pyautogui.click(x,y,button='left')

使用OpenCV和pyscreeze加速

写好上面的程序发现了一个问题,就是使用pyautogui.locateOnScreen速度太慢了,不如用之前玩过的OpenCV识别图片,所以略微修改程序,同样,为了加速截图速度使用pyscreeze截图。这样识别位置操作差不多快了10倍左右

from time import sleep
import pyautogui
from PIL import ImageGrab, Image
import pyscreeze
import cv2

# 屏幕缩放系数 mac缩放是2 windows一般是1
screenScale=1

#事先读取按钮截图
target= cv2.imread(r"zhengnengliang.png",cv2.IMREAD_GRAYSCALE)
# 先截图
screenshot=pyscreeze.screenshot('my_screenshot.png')
# 读取图片 灰色会快
temp = cv2.imread(r'my_screenshot.png',cv2.IMREAD_GRAYSCALE)

theight, twidth = target.shape[:2]
tempheight, tempwidth = temp.shape[:2]
print("目标图宽高:"+str(twidth)+"-"+str(theight))
print("模板图宽高:"+str(tempwidth)+"-"+str(tempheight))
# 先缩放屏幕截图 INTER_LINEAR INTER_AREA
scaleTemp=cv2.resize(temp, (int(tempwidth / screenScale), int(tempheight / screenScale)))
stempheight, stempwidth = scaleTemp.shape[:2]
print("缩放后模板图宽高:"+str(stempwidth)+"-"+str(stempheight))
# 匹配图片
res = cv2.matchTemplate(scaleTemp, target, cv2.TM_CCOEFF_NORMED)
mn_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if(max_val>=0.9):
	# 计算出中心点
	top_left = max_loc
    bottom_right = (top_left[0] + twidth, top_left[1] + theight)
    tagHalfW=int(twidth/2)
    tagHalfH=int(theight/2)
    tagCenterX=top_left[0]+tagHalfW
    tagCenterY=top_left[1]+tagHalfH
    #左键点击屏幕上的这个位置
	pyautogui.click(tagCenterX,tagCenterY,button='left')
else:
	print ("没找到")

这个速度就比较满意了

参考

  1. How can I locate something on my screen quickly in Python?

  2. Python fast screenshots and locateOnScreen

  3. opencv学习笔记十八:模板匹配(cv2.matchTemplate、cv2.minMaxLoc)

  4. 模板匹配-cv2.matchTemplate()、cv2.minMaxLoc()

  5. cv2.matchTemplate模板匹配和cv2.minMaxLoc()函数

### 回答1: Python自动化可以通过编写脚本或程序来实现。具体步骤如下: 1. 确定自动化的目标和需求,例如自动化测试、数据处理、文件操作等。 2. 学习Python编程语言,掌握基本语法和常用模块。 3. 编写Python脚本或程序,实现自动化功能。 4. 调试和测试脚本或程序,确保其正确性和稳定性。 5. 部署脚本或程序,使其能够在需要的时候自动运行。 6. 定期维护和更新脚本或程序,以适应业务需求的变化。 总之,Python自动化需要掌握Python编程技能,结合具体业务需求进行实现和优化。 ### 回答2: Python自动化可以通过编写脚本或使用自动化工具来实现。 首先,使用脚本是实现Python自动化的一种方式。可以编写Python脚本来完成一系列自动化任务,如文件处理、数据分析、网络请求等。通过在脚本中编写所需的逻辑和操作,可以实现自动化的流程。例如,可以编写一个脚本来自动处理指定文件夹中的所有文件,或者编写一个脚本来自动执行网站的爬取和数据提取。 其次,可以使用自动化工具来实现Python自动化。有许多强大的Python自动化工具可供选择,如Selenium、Pywinauto和Appium等。这些工具提供了各种功能和接口,用于自动化网页测试、窗口应用程序自动化和移动应用程序自动化等任务。通过使用这些工具,可以通过编写Python脚本来控制和操作浏览器、应用程序窗口或移动设备等,实现自动化操作。 不论是使用脚本还是自动化工具,Python自动化实现通常需要掌握以下内容: 1. 熟悉Python编程语言:掌握基本的Python语法和数据类型,了解Python的常用库和模块。 2. 学习自动化工具的使用:如果使用自动化工具,需要先学习该工具的使用方法和API。 3. 编写脚本或程序:根据具体的自动化需求,编写Python脚本或程序来实现自动化操作。 4. 调试和测试:在编写代码时,要进行调试和测试,确保代码的正确性和稳定性。 总之,Python自动化实现可以通过编写脚本或使用自动化工具来完成,需要掌握Python编程和相应工具的使用技巧。 ### 回答3: Python自动化可以通过以下几个步骤来实现: 1. 导入所需的Python库:首先,需要导入所需的Python库,例如selenium用于Web自动化,pyautogui用于图像识别与控制,openpyxl用于Excel自动化等。 2. 编写自动化脚本:根据具体需求,编写Python脚本来实现自动化任务。例如,如果要实现网页自动化,可以使用selenium库来打开网页、填写表单、点击按钮等操作;如果要实现图像识别与控制,可以使用pyautogui库来识别特定图像、移动鼠标、点击屏幕等操作;如果要实现Excel自动化,可以使用openpyxl库来读写Excel文件、操作单元格、创建图表等操作。 3. 运行自动化脚本:将编写好的自动化脚本保存为.py文件,使用Python解释器运行该文件。运行脚本后,Python会按照脚本中指定的操作自动执行任务。 4. 验证自动化效果:运行脚本后,可以观察自动化任务的执行效果。根据任务的不同,可以通过查看网页是否自动打开、文件是否自动保存、图表是否正确生成等方式来验证自动化效果。 总的来说,Python自动化能够简化许多重复、繁琐的任务,提高工作效率。但在编写自动化脚本时,需要对目标系统和应用程序有一定的了解,以便正确地选择合适的Python库和编写对应的代码。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值