Windows环境下无API的ERP系统GUI自动化实现咨询
ERP无API时的自动化数据导出实现指引(基于脚本工具)
需求概述
需实现定期打开公司ERP系统并导出指定数据的自动化任务,该ERP无官方API接口,具备R、Python及脚本开发能力,可自主搭建流程。
目标自动化流程
- 启动程序(支持快捷键)
- 等待约2秒后按Enter进入系统(支持快捷键)
- 关闭所有剩余打开的窗口(支持快捷键)
- 打开特定窗口查看指定数据汇总(支持快捷键)
- 切换标签页(支持快捷键)
- 点击窗口特定区域,触发弹出菜单并选择对应选项(需鼠标操作)
- 按Enter保存数据集(支持快捷键)
- 关闭窗口及程序(支持快捷键)
方案对比与选择
已梳理四种可行方案,优先选择方案1:
- Python/AutoHotkey/AutoIt等脚本工具:零成本,但可能存在稳定性问题,前期调试耗时
- 查询ERP底层SQL数据表:厂商不支持,表结构难以解读,不可行
- UiPath等RPA软件:成本较高,效果未知
- 联合ERP厂商开发:可靠性高,但公司成本不菲
方案1:具体实现指引
方向一:使用Python实现
推荐使用pyautogui(键鼠模拟)+pywin32(窗口管理)+time(延迟控制)组合,以下是核心步骤和代码示例:
1. 安装依赖
pip install pyautogui pywin32
2. 核心功能实现示例
import pyautogui import time import win32gui import win32con import os # 全局设置:设置操作延迟,避免因系统响应慢出错 pyautogui.PAUSE = 0.5 pyautogui.FAILSAFE = True # 鼠标移到屏幕角落可终止脚本 def find_window(title): """查找指定标题的窗口句柄""" return win32gui.FindWindow(None, title) def activate_window(hwnd): """激活指定窗口""" win32gui.SetForegroundWindow(hwnd) time.sleep(0.3) # 1. 启动ERP程序 erp_path = "C:/Path/To/Your/ERP.exe" os.startfile(erp_path) time.sleep(2) # 等待程序启动 # 2. 按Enter进入系统 pyautogui.press('enter') time.sleep(1) # 3. 关闭剩余窗口(示例:关闭所有标题含"ERP临时窗口"的窗口) def close_windows_by_title(keyword): def callback(hwnd, extra): if keyword in win32gui.GetWindowText(hwnd): win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) time.sleep(0.2) win32gui.EnumWindows(callback, None) close_windows_by_title("ERP临时窗口") time.sleep(1) # 4. 打开特定数据汇总窗口(模拟快捷键,示例:Ctrl+Shift+D) pyautogui.hotkey('ctrl', 'shift', 'd') time.sleep(2) # 5. 切换标签页(模拟快捷键,示例:Ctrl+Tab) pyautogui.hotkey('ctrl', 'tab') time.sleep(0.5) # 6. 鼠标点击特定区域并选择菜单选项 # 方式1:固定坐标(需先获取目标位置,可通过pyautogui.displayMousePosition()查看) pyautogui.click(x=500, y=300) # 点击触发弹出菜单的区域 time.sleep(0.5) pyautogui.click(x=550, y=350) # 点击菜单中的目标选项 # 方式2:图像识别(更稳定,需提前截取目标按钮的截图) # menu_btn_pos = pyautogui.locateOnScreen('menu_btn.png', confidence=0.8) # if menu_btn_pos: # pyautogui.click(menu_btn_pos) # time.sleep(0.5) # option_pos = pyautogui.locateOnScreen('export_option.png', confidence=0.8) # if option_pos: # pyautogui.click(option_pos) # 7. 按Enter保存数据集 pyautogui.press('enter') time.sleep(1) # 8. 关闭程序(模拟快捷键,示例:Alt+F4) pyautogui.hotkey('alt', 'f4')
3. 稳定性优化建议
- 避免使用固定坐标,优先用图像识别(需安装
opencv-python提升识别精度) - 增加窗口存在性检查,比如用
win32gui.IsWindowVisible(hwnd)确认窗口加载完成 - 脚本运行时关闭系统通知、屏保等干扰项
- 加入try-except块处理异常,避免脚本中途崩溃
方向二:使用AutoHotkey实现
AutoHotkey对Windows系统的键鼠模拟更轻量化,语法简洁,适合快速实现:
1. 核心脚本示例
; 设置全局延迟 SetDefaultMouseSpeed, 10 SetKeyDelay, 50 ; 1. 启动ERP程序 Run, C:\Path\To\Your\ERP.exe Sleep, 2000 ; 2. 按Enter进入系统 Send, {Enter} Sleep, 1000 ; 3. 关闭剩余窗口(示例:关闭标题含"ERP临时窗口"的窗口) WinClose, ERP临时窗口 Sleep, 1000 ; 4. 打开数据汇总窗口(快捷键Ctrl+Shift+D) Send, ^+d Sleep, 2000 ; 5. 切换标签页(快捷键Ctrl+Tab) Send, ^{Tab} Sleep, 500 ; 6. 点击特定区域并选择菜单 Click, 500, 300 ; 触发菜单的位置 Sleep, 500 Click, 550, 350 ; 菜单选项位置 ; 7. 保存数据集 Send, {Enter} Sleep, 1000 ; 8. 关闭程序 Send, !{F4}
2. 优化技巧
- 用
WinWaitActive等待窗口激活后再执行操作,比如WinWaitActive, ERP主窗口 - 用
ImageSearch实现图像识别定位按钮,比固定坐标更稳定 - 可添加托盘菜单,方便手动触发或停止脚本
内容的提问来源于stack exchange,提问作者ulima2_
相关产品推荐
相关产品推荐

