网站首页 > 技术文章 正文
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的自动化工具包。使用这些工具包可以让繁琐的工作自己动起来,实现自动化,解放我们的双手,大大地提高工作效率。不过在智能方面还有很大的提升空间,这也是未来努力的方向。
猜你喜欢
- 2024-11-14 Playwright自动化测试工具之元素定位实战
- 2024-11-14 利器 | AppCrawler 自动遍历测试实践(二):定制化配置
- 2024-11-14 java组件HuTool相关工具类的使用二
- 2024-11-14 手把手教你爬取热门小说《诡秘之主》
- 2024-11-14 Python爬虫之xpath用法全解析(py xpath)
- 2024-11-14 怎么用xpath写drissionpage?或者用相对位置?
- 2024-11-14 通过python+Xpath实现抓取某网站推荐的歌曲
- 2024-11-14 web自动化测试——xpath常用案例(web自动化测试平台)
- 2024-11-14 手把手教你如何用Python爬取网站文本信息
- 2024-11-14 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)