Windows 上做 Python RPA 的常用库与最小骨架
在 Windows 上做 RPA,不必一上来上商业平台。Python 里这三套库通常够用:
- pyautogui:鼠标键盘、截图、坐标点击
- pywinauto:按窗口/控件名称操作,比纯坐标稳
- opencv-python:模板匹配,处理没有控件树的界面
最小示例
import time, logging, pyautogui
from pywinauto.application import Application
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("rpa")
pyautogui.PAUSE = 0.5
class DesktopRPA:
def __init__(self):
self.app = None
self.window = None
def start(self, path: str) -> bool:
try:
self.app = Application(backend="uia").start(path)
return True
except Exception as e:
logger.error("启动失败: %s", e); return False
def connect(self, title: str, timeout: int = 10) -> bool:
try:
self.window = self.app.window(title=title)
self.window.wait("visible", timeout=timeout)
return True
except Exception as e:
logger.error("连接窗口失败: %s", e); return False
def click_by_name(self, name: str) -> bool:
try:
self.window.child_window(title=name, control_type="Button").click_input()
return True
except Exception as e:
logger.error("点击控件失败: %s", e); return False
def click_by_image(self, image_path: str, confidence: float = 0.9) -> bool:
pos = pyautogui.locateCenterOnScreen(image_path, confidence=confidence)
if not pos: return False
pyautogui.click(pos); return True
if __name__ == "__main__":
rpa = DesktopRPA()
rpa.start(r"C:\Program Files\Your\App.exe")
time.sleep(2)
rpa.connect("Your Application Title")
rpa.click_by_name("确定")
实践建议
- 能拿到控件树就优先 pywinauto,少用绝对坐标。
- 坐标/图像方案要处理 DPI 缩放与分辨率差异。
- 关键步骤加日志和超时,避免 UI 卡顿时死循环。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 HT Notes