影刀RPA 桌面应用自动化:操作老旧系统的实战技巧 📅 2026/7/19 3:04:18 影刀RPA 桌面应用自动化操作老旧系统的实战技巧作者林焱一、什么情况要对桌面应用动手很多企业的核心系统是上了年头的Win32桌面程序——老版用友、老版SAP、各种行业专有系统。这些系统没有API没有网页端升级改造成本极高但每天大量工作要在里面操作。影刀RPA的UI自动化能力可以直接操控这些界面就像真人在操作一样。桌面应用自动化的核心手段元素识别识别按钮、输入框、列表、菜单快捷键操作很多老系统只支持键盘操作截图OCR界面元素无法直接识别时截图文字识别坐标点击实在没法识别元素用固定坐标兜底最后手段二、实战一操作老版用友财务系统拼多多店群自动化报活动上架场景用友U8老版本每月末要把几百张收款凭证从Excel导入系统无法直接导入只能逐张手工录入。Step 1识别用友的界面元素影刀打开桌面录制点击用友的控件会显示元素的Name、ClassName等属性。【启动应用程序】 路径C:\UFIDA\U8\UFSOFT\UFO.EXE 【等待窗口出现】 窗口标题用友ERP-U8 2025版 【最大化窗口】Step 2导航到凭证录入界面# 用友主要靠菜单和快捷键yingdao.click_menu(财务会计)yingdao.wait(0.5)yingdao.click_menu(凭证管理)yingdao.wait(0.5)yingdao.click_menu(填制凭证)yingdao.wait_for_window(填制凭证)Step 3循环录入凭证voucherspd.read_excel(C:\\财务\\收款凭证清单.xlsx)for_,voucherinvouchers.iterrows():# 新增凭证yingdao.press_key(AltN)# 用友新增凭证的快捷键yingdao.wait(0.5)# 摘要yingdao.find_element({Name:摘要,ClassName:Edit}).send_keys(voucher[摘要])yingdao.press_key(Tab)# 科目编码yingdao.find_element({Name:科目编码}).send_keys(voucher[科目编码])yingdao.press_key(Enter)# 确认科目yingdao.wait(0.3)# 借方金额ifvoucher[方向]借:yingdao.find_element({Name:借方金额}).send_keys(str(voucher[金额]))else:yingdao.find_element({Name:贷方金额}).send_keys(str(voucher[金额]))# 保存yingdao.press_key(CtrlS)yingdao.wait(0.5)# 确认保存弹窗ifyingdao.window_exists(保存确认):yingdao.press_key(Enter)三、实战二OCR识别无法操控的界面某些老系统用了非标准控件比如Delphi界面影刀的元素识别无法捕获控件属性这时改用截图OCR。importbase64# 截取指定区域screenshotyingdao.screenshot(region(100,200,800,600))# x, y, width, height# OCR识别ocr_resultyingdao.ocr_image(screenshot)# 在识别结果中找目标字段foriteminocr_result:if合计金额initem[text]:# 找到了记录坐标x,yitem[x],item[y]# 在该位置右边点击假设金额在标签右侧yingdao.click(x150,y)break更精准的方法——模板匹配# 保存一个合计金额标签的截图作为模板template_pathC:\\模板\\合计金额标签.png# 在当前屏幕中查找模板位置matchyingdao.find_image(template_path,threshold0.9)ifmatch:# 点击模板右侧200像素处yingdao.click(match[x]200,match[y])四、实战三自动操作老系统的弹窗TEMU店群矩阵自动化运营核价报活动老系统弹窗是最大的坑——突然弹出是否确认“或系统提示”会阻塞整个流程。importthreadingdefhandle_popups():后台线程持续监测并处理弹窗whileTrue:# 检测常见弹窗ifyingdao.window_exists(系统提示):yingdao.press_key(Enter)# 确认elifyingdao.window_exists(错误):error_textyingdao.get_window_text(错误)# 记录错误关闭弹窗error_log.append(error_text)yingdao.press_key(Escape)elifyingdao.window_exists(警告):yingdao.click_button(确定)time.sleep(0.5)# 启动弹窗处理线程popup_threadthreading.Thread(targethandle_popups,daemonTrue)popup_thread.start()# 主流程继续执行...五、踩坑记录坑1坐标点击在不同分辨率下失效固定坐标只在特定屏幕分辨率和DPI下准确。换台电脑跑就会点错位置。解决方案始终优先用元素识别坐标点击只作为最后手段且要加分辨率判断。坑2老系统在高DPI屏幕上界面失真Win32老程序不支持高DPI缩放在4K显示器上界面会模糊或缩放异常导致元素识别失败。临时方案在兼容性设置里把程序设为系统DPI缩放。坑3快捷键被输入法拦截用友等系统的快捷键AltN有时被搜狗输入法拦截。要在流程开始时切换到英文输入法yingdao.press_key(Shift)切换输入法。坑4老系统的保存后没有任何提示有些老系统保存成功后没有弹窗只是界面刷新。用等待指定UI元素消失或出现来判断而不是固定等待时间。适用人群财务人员、ERP操作员、需要对接老系统的IT部门难度⭐⭐⭐⭐需要了解Win32界面操作原理