You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下无API的ERP系统GUI自动化实现咨询

ERP无API时的自动化数据导出实现指引(基于脚本工具)

需求概述

需实现定期打开公司ERP系统并导出指定数据的自动化任务,该ERP无官方API接口,具备R、Python及脚本开发能力,可自主搭建流程。

目标自动化流程

  • 启动程序(支持快捷键)
  • 等待约2秒后按Enter进入系统(支持快捷键)
  • 关闭所有剩余打开的窗口(支持快捷键)
  • 打开特定窗口查看指定数据汇总(支持快捷键)
  • 切换标签页(支持快捷键)
  • 点击窗口特定区域,触发弹出菜单并选择对应选项(需鼠标操作)
  • 按Enter保存数据集(支持快捷键)
  • 关闭窗口及程序(支持快捷键)

方案对比与选择

已梳理四种可行方案,优先选择方案1:

  1. Python/AutoHotkey/AutoIt等脚本工具:零成本,但可能存在稳定性问题,前期调试耗时
  2. 查询ERP底层SQL数据表:厂商不支持,表结构难以解读,不可行
  3. UiPath等RPA软件:成本较高,效果未知
  4. 联合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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:28:35