Python自动化操作:简单、有趣、高效!解放你的工作流程!

发布时间:2024年01月13日

今天跟大家分享一套自动化操作流程解决方案,基于Python语言,涉及pyautogui、pyperclip、pythoncom、win32com依赖包。安装命令为:

pip install pyautogui

pip install pyperclip

pip install pythoncom

pip install win32com

pyautogui 是一个自动化控制鼠标和键盘的 Python 模块,使用 PyAutoGUI 执行的一些常见任务:移动鼠标光标、单击鼠标(左键、右键和中键单击)、截取屏幕截图、在屏幕上查找图像或模式、获取当前鼠标位置等等。

pyperclip 可以在不同应用程序之间复制和粘贴文本数据,有一些应用程序界面不支持按键的Ctrl C和Ctrl V操作,可以借此实现。

pythoncom 允许Python程序与COM对象进行交互,实现COM对象的创建、访问、调用(例如访问 Microsoft Office 文档、操作 Windows 注册表等),这对于与Windows上的各种应用程序和服务进行集成和自动化非常有用。

win32com 和pythoncom模块一样,但提供了更高级的功能和更容易使用的接口。

我将基于上述4个模块,讲述Windows系统下某应用程序的自动化操作流程的实现步骤:

自动化操作流程类似于RPA机器人流程自动化软件,首先需要进行一遍人工操作流程,把关键点击节点或重要操作步骤截图保存,基于这一系列截图照片和应用程序界面进行图片比对、相对坐标位置点击实现鼠标点击或者键盘输入,达到自动化操作。

但是在模拟操作过程中,需要应用程序始终为置顶状态,下面程序可以获取到当前电脑打开的所有应用程序句柄,找到待操作对象的应用程序句柄hwnd,将其进行置顶,下图为获取到的当前所有应用程序句柄列表。

win32gui.EnumWindows(get_all_hwnd, 0)
for h, t in hwnd_title.items():
if t is not "":
print(([h], [t]))

应用程序置顶可以有效避免了新闻或者广告弹窗覆盖了操作区域,发生误触,下面程序是实现句柄为hwnd的应用程序置顶。

def setFront(hwnd):
pythoncom.CoInitialize()
shell =                        win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(hwnd)
time.sleep(0.2)
# 释放资源
pythoncom.CoUninitialize()

进入应用程序界面,接下来在待操作区域进行图像识别,得到模拟点击的位置或者相对坐标位置,以下示例中im1是应用程序界面截图,img是待模拟点击功能按钮区域截图,以下两种方法均可实现:

01 图像识别
im1 = pyautogui.screenshot(region=(截图区域左上角X轴坐标, 截图区域左上角Y轴坐标,截图区域的宽度, 截图区域的高度))

#在im1区域内定位img图像 grayscale=True开启灰度识别 confidence=0.7相似度匹配阈值

loc = pyautogui.locate(img, im1, grayscale=True, confidence=0.7)

#点击待操作功能按钮截图中心坐标

x, y = pyautogui.center(loc)

setFront(hwnd)

pyautogui.click(x, y)

02 相对坐标
获取当前程序的坐标x、y及其宽度w、高度h,在此基础上进行偏移量计算后进行点击

rect = win32gui.GetWindowRect(hwnd)
x = rect[0]
y = rect[1]
w = rect[2] - x
h = rect[3] - y
setFront(hwnd)

pyautogui.click(x + 相对偏移位置, y + 相对偏移位置)

下图为点击应用程序界面的相对坐标位置实现鼠标点击启动:

如果应用程序区域正在响应过程,还没有出现待点击功能区域,固定的等待时间可能出现意外,所以获取函数的返回值loc = pyautogui.locate(img, im1, grayscale=True, confidence=置信度),该函数在没有匹配到待操作功能区域截图时,将会返回None,下面程序是基于函数的返回值None判断是否出现某个功能按钮,实现停等程序响应:

#等待img出现在程序界面,默认等待30秒

def waitOccur(img, n=30):

for i in range(n):

m1 = pyautogui.screenshot(region=(截图区域左上角X轴坐标, 截图区域左上角Y轴坐标,截图区域的宽度, 截图区域的高度))

loc = pyautogui.locate(img, im1, grayscale=True, confidence= 置信度)

locx, locy = getLoc(img)

if locx != 0 and locy != 0:

return True

time.sleep(1)

return False

下图为等待应用程序内某个待点击区域出现后,点击对应位置,实现操作。

上述内容为自动化流程的几个关键操作函数,后续的功能操作,也是这几种关键方法实现,读者们自行实现定制化操作,但在实现过程有以下注意事项:

1.在实现过程中,建议每一次鼠标模拟点击前进行一次应用程序置顶操作setFront(hwnd);

2.建议点击间隔秒数控制较大一些,使用time.sleep(睡眠秒数)进行设置,避免程序响应过慢引起失效。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

?

文章来源:https://blog.csdn.net/2301_76643199/article/details/135571152
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。