python的win32gui, pyautogui, pywinauto,pynput对比

这篇博客对比了Python中用于自动化操作的四个库:win32gui、pyautogui、pywinauto和pynput。win32gui专注于窗口和控件的查找与操作,句柄值可能随程序打开而变化。pyautogui提供了GUI控制、鼠标和键盘操作以及屏幕识别功能。pywinauto适用于Windows GUI自动化,但博主在使用时遇到了版本兼容性问题。pynput则专注于键盘和鼠标的控制。文章提供了相关资源和简单示例,帮助读者理解和使用这些库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

正在使用python进行自动化的编辑,这期间也是刚好测试了几个相关的软件:win32gui,pyautogui,pywinauto,发现网上拿他们进行对比的文章几乎没有,自己试了一下,也就是按照自己一两天的感觉对比一下,希望对于后边遇到同样问题的人可以有所参考。

win32gui

win32gui,我的理解就是更多关于窗体的查找操作。包括窗口到文本框的所有控件就是窗体,所有的窗体都有独立的句柄。要操作任意一个窗体,你都需要找到这个窗体的句柄,这里,我们就可以用到FindWindow函数和FindWindowEx函数。
具体可以参考这个文章:
如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx: 链接
至于查找到控件的具体句柄之后,便可以进行一系列的操作了,比如说向edit控件填写内容。

win32api.SendMessage(0x209C8, win32con.WM_SETTEXT, 0, '300')

不过我使用的感觉是:每次打开程序,句柄值都会变化,这样每次使用都是必须先查找,后进行操作。
这里面还经常会碰到两个软件的使用,spy++和Inspect。下面是他们的下载地址:
Inspect:

pyautogui

pyautogui这个文章我觉着写得很不错,基本上看完就可以直接使用了。
Python基础之pyautogui模块(详细总结鼠标键盘操作)链接
pyautogui的主要功能包括:1. GUI 控制功能,2. 鼠标操作,3. 屏幕处理,4. 键盘输入
尤其讲到其中的屏幕处理,我们控制鼠标的操作,不能盲目的进行,所以我们需要监控屏幕上的内容,从而决定要不要进行对应的操作。
包括另外一个功能,通过原先制定一个图像,然后在屏幕上识别它的位置,这个很实用。

import pyautogui
pyautogui.PAUSE = 1

# 图像识别(一个)
btm = pyautogui.locateOnScreen('zan.png')
print(btm) 

# 图像识别(多个)
btm = pyautogui.locateAllOnScreen('zan.png')
print(list(btm))  

pywinauto

Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。
其中,最主要功能为对windows标准控件的一系列动作可编程处理。包括对窗口的指定、鼠标或键盘操作、获得控件属性等等。程序的开始为对所需应用的启 动或连接。获得程序连接后,pywinauto通过窗口的名称、类名、是否可见等属性寻找匹配的窗口,进而通过类似方法寻找用户所需的控件,并获得相应的 句柄。之后,用户可通过易理解的编程方式对指定控件进行相关操作的编程,包括鼠标点击、键盘输入、判断控件间关系、获取控件属性等。
这个文章讲得比较清楚,
pywinauto教程链接
然而在我本机运行的时候,却一直报错。
报的是:from pywinauto.application import Application 这一句。
我的python版本是3.7.6,使用的是anaconda安装的,不知道看官是否也是这个情况,所以后边的测试没法做。网上找到有个说法是这个只能用于3.7.4的版本。

pynput

以前用的较多的键盘控制轮子是pynput。pynput是什么?官方说法:“他可以控制和监听我们的输入设备,目前支持鼠标和键盘的控制与监听;因为我只使用了设备的控制 至于监听并没作深入了解 文章也不设计”。这个文章讲得比较清楚,就是单纯的鼠标链接的使用。
python监听、操作键盘鼠标库pynput详细教程 链接

<think>好的,我现在需要回答用户的问题:Python还有哪些其他库可用于自动化GUI交互?让我先回想一下自己知道的库,然后逐步整理出来。 首先,用户可能已经知道一些常见的库,比如PyAutoGUI,但需要更多的选项。我需要确保涵盖不同用途的库,比如桌面应用、Web应用、移动应用等,以及各自的优缺点。 首先想到的是Selenium,主要用于Web自动化,但用户问的是GUI交互,所以应该包括进去。然后是像PyWinAuto这样的针对Windows原生应用的库。还有Appium,适用于移动应用的自动化。可能还有其他的,比如PyQt的测试工具,或者像Kivy这样的框架自带的测试库? 接下来,我需要确认每个库的具体用途特点。例如,PyAutoGUI是跨平台的,可以控制鼠标键盘,但可能不擅长处理控件识别。PyWinAuto专门用于Windows的GUI应用,支持Win32、MFC等。Selenium当然用于浏览器自动化,而Appium扩展了Selenium到移动端。 还有没有其他库呢?比如,像Robot Framework,虽然本身是一个自动化框架,但它可以集成其他库。或者像AutoPy,也是一个跨平台的GUI自动化库,但可能不如PyAutoGUI流行。还有Pywinauto,可能之前已经提到了PyWinAuto,但拼写是否正确呢?应该是Pywinauto,对吧? 此外,对于游戏或特定应用,可能有像pyautogui这样的图像识别方式。还有像Gooey这样的库,用于将命令行程序转为GUI,但可能不属于自动化交互的范畴。需要排除掉。 可能需要提到的还有Tkinter的测试工具,不过Tkinter本身是创建GUI的,测试可能需要像Dogtail或类似的工具。不过Dogtail更多是针对Linux下的Accessibility API的,比如GNOME应用。 还有,像PyGUI这样的库可能不是自动化用的。或者像SikuliX,基于图像识别的自动化工具,但SikuliX本身是用Java的,不过可能有Python的绑定,比如sikuli库? 对了,还有像Pynput,用于监控控制输入设备,但可能属于底层控制,PyAutoGUI类似,但更偏向于输入事件的监听控制,不一定直接用于GUI自动化。 另外,对于Android应用,除了Appium,还有像uiautomator2这样的Python库,专门用于Android UI测试。这也是一个点。 现在需要把这些整理出来,分成不同的类别,比如桌面应用、Web、移动端,或者按功能分。同时需要给出每个库的简要说明,特点,适用场景,可能的使用例子。 需要确保信息准确,比如PyAutoGUI是否支持图像识别,是的,它可以通过截图来定位元素。而Pywinauto则是通过控件树来操作,更精确。 还要注意拼写正确,例如Pywinauto的正确名称,以及是否区分大小写。另外,Selenium通常需要配合浏览器驱动,而Appium需要配置移动设备的环境。 另外,有没有针对Java Swing或Electron应用的库?比如,对于Electron应用,可能需要使用Spectron或类似的工具,但Python中是否有对应的库?或者可能需要使用Pywinauto来处理Windows下的Electron应用控件。 此外,像Lemonce可能是一个商业工具,但可能不是开源的Python库。可能不需要提及。 总结下来,可能的库列表包括: 1. PyAutoGUI 2. Pywinauto 3. Selenium 4. Appium 5. AutoPy 6. Pywinauto(重复了?不,可能之前已经列过) 7. uiautomator2 8. SikuliX(通过Python绑定) 9. Robot Framework(集成多种工具) 10. PySNMP(可能不相关) 等等。需要筛选出确实相关的。 现在需要组织这些信息,每个库的名称,简介,特点,适用场景,示例用途,以及可能的安装命令。 例如: - PyAutoGUI:跨平台,模拟鼠标键盘操作,图像识别。 - Pywinauto:Windows GUI自动化,基于控件。 - Selenium:Web应用,支持多种浏览器。 - Appium:移动应用,支持iOSAndroid。 - uiautomator2:Android UI测试。 - AutoPy:跨平台,基础输入控制。 - SikuliX:图像识别驱动。 - Robot Framework:自动化测试框架,可集成Selenium等。 还需要注意是否有其他库,比如像Behave这样的BDD工具,但可能不属于GUI自动化库本身。 另外,像Playwright,较新的库,支持浏览器自动化,类似于Selenium但更现代,可能也需要提及。不过用户的问题可能希望更多非Web的库,但Playwright也是一个选项。 确认这些库是否适用于GUI交互,比如Playwright主要针对Web,但属于GUI自动化的一部分。 整理时,需要分门别类,比如桌面应用、Web、移动端,或者按技术类型分。 最后,确保每个库的说明准确,没有错误。例如,Pywinauto是否只支持Windows,是的。AutoPy是否跨平台,是的,但功能可能有限。 可能还需要提到一些库的优缺点,比如PyAutoGUI的缺点是基于图像识别可能不够稳定,而Pywinauto则更精准但仅限于Windows。 现在需要将这些整理成一个结构清晰的回答,帮助用户了解不同库的适用场景,并给出安装示例简单用法。</think>以下是Python中可用于自动化GUI交互的常用库及其特点,按应用场景分类: --- ### **1. 桌面应用自动化** #### **PyAutoGUI** - **简介**:跨平台库,模拟鼠标、键盘操作,支持图像识别定位元素。 - **特点**: - 简单易用,适合基础自动化(如点击、拖拽、截图)。 - 依赖屏幕坐标或图像匹配,不适合复杂控件操作。 - **安装**:`pip install pyautogui` - **示例**: ```python import pyautogui pyautogui.click(100, 200) # 点击屏幕坐标(100,200) ``` #### **Pywinauto** - **简介**:专为Windows设计,通过控件树操作原生应用(如Win32、MFC、Qt)。 - **特点**: - 精确操作窗口、菜单、按钮等控件。 - 支持获取控件属性(如文本、状态)。 - **安装**:`pip install pywinauto` - **示例**: ```python from pywinauto import Application app = Application().start("notepad.exe") app.Notepad.menu_select("文件->另存为") ``` #### **SikuliX(通过Python绑定)** - **简介**:基于图像识别驱动自动化,适合无法直接获取控件的场景。 - **特点**: - 通过截图匹配操作元素。 - 支持跨平台,但需手动维护截图库。 - **安装**:需下载SikuliX并配置环境(见[官网](http://sikulix.com))。 --- ### **2. Web应用自动化** #### **Selenium** - **简介**:主流Web自动化工具,支持浏览器操作(如Chrome、Firefox)。 - **特点**: - 通过DOM元素定位(ID、XPath等)。 - 支持复杂交互(表单提交、弹窗处理)。 - **安装**:`pip install selenium` - **示例**: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.find_element("id", "kw").send_keys("Python") ``` #### **Playwright** - **简介**:新一代浏览器自动化库,支持Chromium、WebKit、Firefox。 - **特点**: - 性能优于Selenium,支持无头模式、网络拦截等。 - 提供同步异步API。 - **安装**:`pip install playwright` - **示例**: ```python from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("https://example.com") ``` --- ### **3. 移动应用自动化** #### **Appium** - **简介**:跨平台移动端自动化框架,支持iOSAndroid。 - **特点**: - 基于WebDriver协议,与Selenium兼容。 - 需连接真机或模拟器。 - **安装**:`pip install Appium-Python-Client` - **示例**: ```python from appium import webdriver desired_caps = {"platformName": "Android", "deviceName": "emulator"} driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) ``` #### **uiautomator2** - **简介**:专为Android设计的UI测试库,基于Google的`UI Automator`框架。 - **特点**: - 直接操作控件,无需ROOT。 - 支持快速截图性能监控。 - **安装**:`pip install uiautomator2` - **示例**: ```python import uiautomator2 as u2 d = u2.connect() d(text="设置").click() ``` --- ### **4. 其他工具** #### **Robot Framework** - **简介**:通用自动化测试框架,可集成Selenium、Appium等库。 - **特点**: - 关键字驱动,适合编写结构化测试用例。 - 需额外安装库(如`robotframework-seleniumlibrary`)。 - **安装**:`pip install robotframework` #### **AutoPy** - **简介**:轻量级跨平台库,提供基础输入控制简单图像识别。 - **特点**: - 适合简单任务(如键盘输入、颜色检测)。 - **安装**:`pip install autopy` --- ### **如何选择库?** - **桌面应用**:优先用`Pywinauto`(Windows)或`PyAutoGUI`(跨平台)。 - **Web应用**:推荐`Selenium`或`Playwright`。 - **移动端**:选`Appium`(跨平台)或`uiautomator2`(Android专用)。 - **图像识别需求**:考虑`SikuliX`或`PyAutoGUI`的图像匹配功能。 根据具体场景平台特性选择合适的工具,可显著提升自动化效率稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值