python控制软件自动化(python自动化模块)
Python的优雅、简洁与强大深深地吸引着我们,它海量的工具包为我们的工作提供了强有力的支持。在自动化工作中,Python更是一把利器,数十行代码就能干净利落地完成很多繁琐重复的工作。本文在这里将介绍Python中四种常用的自动化工具包。
Pywin32
Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的Windows常量、接口、线程以及COM机制等等。这个库里面最重要的三个模块win32api、win32gui和win32con。
查找句柄:窗体是指窗口到文本框的所有控件,每个窗体都有独立的句柄。要操作任意一个窗体,都需要找到这个窗体的句柄。我们可以用win32gui模块中的FindWindow函数和FindWindowEx函数(子窗体函数)来得到指定窗体的句柄。(使用Spy 或Inspect可以很方便地查看目标窗口的窗口名、类名和句柄)
菜单操作:窗口的菜单就像窗口的标题栏一样,是窗口自身的一部分,不是其他窗体控件,也就没有办法用FindWindow和FindWindowEx返回句柄。我们可以用win32gui模块中的GetMenu,GetSubMenu和GetMenuItemID函数来操作菜单。
控件操作:控件的操作基于win32的消息机制,我们可以使用win32api模块的SendMessage函数向窗体发送消息来进行操作。同时也可以利用mouse_event、keybd_event等函数模拟鼠标和键盘对控件进行操作。
下面的代码实现了记事本的自动保存。
Pywinauto
Pywinauto是实现Windows窗口程序自动化的一把利器,它主要操作于Windows标准图形界面。Pywinauto基于Pywin32,其最主要功能为对Windows标准控件的一系列动作可编程处理,包括对窗口的指定、鼠标或键盘操作、获得控件属性等等。相比起Pywin32,Pywinauto使用起来更方便稳定,对中文的支持度也更好。下面简单地介绍一下Pywinauto的使用。
首先,利用Spy 或Inspec判断窗口程序开发语言是什么,即确定backend。Pywinauto支持“win32”和“uia”两种backend。接着,从Pywinauto.application中导入Application模块,利用Application().start函数或Application().connect函数关联到一个应用。如:app = Application(backend="uia").start('notepad.exe')。此后,利用正则表达式进行模糊匹配找到应用app的一个窗体,如:dlg = app.window_(title_re = ".*Part of Title.*")。最后,可以对窗体上的控件模拟鼠标或键盘的操作,实现应用窗口的自动操作。
下面代码实现了对记事本菜单的操作和键盘输入。
Pyautogui
Pyautogui是另一个常用的基于Python的GUI自动化工具,能够支持多个平台。Pyautogui主要是用程序自动控制鼠标和键盘操作。虽然Pyautogui和Pywinauto都是实现GUI 的自动操作,但两者的侧重点不同。Pyautogui侧重于鼠标、键盘、截图等功能,且是基于图像匹配进行定位的,而Pywinauto侧重与对系统的操作,虽然也有键盘和鼠标的模拟操作,但核心上还是软件上的操作更多。两者各有所长,需根据实际情况选择合适的。
Pyautogui对鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标 键盘的热键同时按住等操作都能准确模拟,可以说手能动的都可以,并且简单方便。但由于控件的定位依赖于图像匹配,所以得事先保存好控件的截图,然后在操作时自动截取屏幕,利用图像匹配找到控件在屏幕的像素位置,再将鼠标自动移至控件处点击。Pyautogui自带的图像匹配函数精度不是很高,可以加入opencv中的匹配函数来代替,更加准确方便。
下面代码实现了百度网盘的自动登录。
Selenium with Python
Selenium与上面三种工具有点不同,它的自动化对象是各种浏览器,包括Chrome、Safari、FireFox、IE等主流界面式的浏览器,常在爬虫应用中发挥很大的作用。Selenium最为主要的模块是Webdriver模块。Webdriver提供了一系列浏览器对象定位的方法,常用的有id、name、class name、tag name、xpath、link text等等。定位对象后,Webdriver提供了操作对象的方法,包括清除内容clear、模拟输入send_keys、单击鼠标click、提交表单submit等等。有时候为了保证脚本运行的稳定性,需要在脚本中添加等待时间,有sleep、implicitly_wait和WebDriverWait三种方法选择。此外在多表单切换、多窗口切换、警告窗口处理、上传文件、获取验证码等方面Webdriver都有相应的方法,功能强大。
下面的代码实现了模拟提交搜索功能,首先等页面加载完成,然后输入到搜索框文本,点击提交。
本文分别介绍了Pywin32、Pywinauto、Pyautogui和Selenium with Python四种基于Python的自动化工具包。使用这些工具包可以让繁琐的工作自己动起来,实现自动化,解放我们的双手,大大地提高工作效率。不过在智能方面还有很大的提升空间,这也是未来努力的方向。