一、项目简介
本项目是一个基于影刀RPA(ShadowBot)平台开发的自动化解决方案,旨在通过机器人流程自动化技术实现业务流程的自动化处理。项目采用Python语言开发,结合影刀RPA特有的流程设计和元素定位技术,实现了一系列自动化操作流程,可有效提高工作效率,减少人工操作错误。
二、项目结构
xbot_robot
├── .dev\ # 开发相关文件
│ ├── icon\ # 图标资源
│ ├── screenshot\ # 截图资源
│ ├── *.flow.json # 流程配置文件
│ └── *.pdb # 流程调试文件
├── __pycache__\ # Python编译缓存
├── resources\ # 项目资源
├── __init__.py # Python包初始化
├── main.py # 项目入口文件
├── package.py # 项目打包配置
├── utils.py # 通用工具函数
├── process*.py # 自动化流程实现(process2.py至process14.py)
├── images.xml # 图像资源配置
├── imagesV2.xml # 图像资源配置V2
├── selectors.xml # 元素选择器配置
├── selectorsV2.xml # 元素选择器配置V2
└── settings.json # 项目设置
三、项目特点和核心代码
项目特点
- 模块化设计:将不同的自动化流程拆分为独立的process文件,便于维护和扩展
- 元素定位优化:通过selectors.xml和selectorsV2.xml管理UI元素定位信息
- 图像识别支持:集成images.xml配置,支持基于图像的元素识别
- 工具函数封装:utils.py提供通用功能封装,减少代码冗余
- 多流程支持:包含13个不同的自动化流程(process2-process14)
核心代码示例
1. 主流程控制(main.py):
import xbot
import xbot_visual
from . import package
def main(args):
try:
# 依次调用各个子流程
process_result2 = xbot_visual.process.run(process="process6", package=__name__, inputs={},
outputs=["dialog_result"], _block=("主流程", 1, "调用流程"))
_ = xbot_visual.process.run(process="process7", package=__name__, inputs={},
outputs=[], _block=("主流程", 2, "调用流程"))
process_result = xbot_visual.process.run(process="process5", package=__name__,
inputs={"web_page": package.variables['web_page']}, outputs=["loop_index"],
_block=("主流程", 3, "调用流程"))
# 更多流程调用...
finally:
pass
2. 网页数据抓取与处理(process2.py):
import xbot
import xbot_visual
from . import package
def main(args):
company_data_list = []
try:
# 获取网页对象
package.variables['web_page'] = xbot_visual.web.get(web_type="cef", mode="activated",
wait_load_completed=True, load_timeout="20", _block=("B3 单条信息获取", 1, "获取已打开的网页对象"))
# 批量数据抓取
web_data_table = xbot_visual.web.element.data_scraping(
browser=package.variables['web_page'], table_element=package.selector("企业工商信息"),
handle_pager=False, _block=("B3 单条信息获取", 4, "批量数据抓取"))
# 数据清洗与处理
for loop_item in xbot_visual.workflow.list_iterator(list=web_data_table, loop_start_index="0",
loop_end_index="-1", _block=("B3 单条信息获取", 12, "ForEach列表循环")):
# 移除空值和特殊字符
loop_item = [x.replace('复制','').strip() if x else "空" for x in loop_item]
# 组装字典数据
assembled_object = xbot_visual.process.run(process="xbot_extensions.shadowbot_list.process9",
package=__name__, inputs={"list_instance1": table_name, "list_instance2": company_data_list},
outputs=["assembled_object"], _block=("B3 单条信息获取", 22, "列表组装"))
finally:
args["company_data_list"] = company_data_list
3. 通用工具函数(utils.py):
def get_selector(selector_name):
"""根据选择器名称从配置文件中获取对应的选择器"""
# 从selectors.xml或selectorsV2.xml中读取选择器配置
# 实现代码...
return selector
def click_element(selector):
"""点击指定选择器对应的元素"""
xbot_visual.mouse.click(selector=selector, click_type="left", _block=("通用操作", 1, "鼠标点击"))
time.sleep(0.5)
def input_text(selector, text):
"""向指定选择器对应的输入框输入文本"""
xbot_visual.keyboard.input_text(selector=selector, text=text, _block=("通用操作", 2, "输入文本"))
四、适用场景
- 数据录入自动化:适用于需要将数据从Excel或其他来源录入到业务系统的场景
- 网页操作自动化:可实现网页表单填写、数据爬取、按钮点击等操作
- 文件处理自动化:支持文件格式转换、内容提取、批量重命名等操作
- 重复性任务处理:适用于任何有规律的、重复性的人工操作流程
- 跨系统数据同步:可在不同业务系统之间实现数据自动同步
五、常见问题与建议
常见问题
- 网页元素定位失败:目标网站界面更新导致selectors.xml或selectorsV2.xml中的选择器失效,特别是process2.py中使用的"企业工商信息"表格选择器
- 流程调用依赖错误:main.py中多流程调用(process6→process7→process5→…)时,前序流程失败导致后续流程无法正常执行
- 网页数据抓取不完整:网页加载未完成就执行数据抓取(process2.py中的web_data_table获取),导致表格数据缺失
建议
-
选择器维护策略:
- 为关键选择器添加版本注释,如
<!-- 2023-10-20 更新:适配网站改版 -->
- 在process2.py中实现选择器自动验证功能,启动时检查关键选择器有效性
def validate_selectors(): critical_selectors = ["企业工商信息", "登录按钮", "数据表格"] for selector in critical_selectors: if not xbot_visual.element.exists(package.selector(selector)): xbot_visual.log.warning(f"选择器失效: {selector}")
- 为关键选择器添加版本注释,如
-
流程调用优化:
- 在main.py的流程调用中添加错误捕获和恢复机制
try: process_result = xbot_visual.process.run(process="process5", ...) except Exception as e: xbot_visual.log.error(f"process5执行失败: {e}") # 尝试恢复机制 xbot_visual.process.run(process="process5_recovery", ...)
-
网页数据抓取增强:
- 在process2.py中增加页面加载完成验证
xbot_visual.web.wait_for_element(package.selector("表格加载完成标志"), timeout=30)
-
资源管理规范:
- 建立截图文件命名规范:
{process_name}_{step}_{timestamp}.png
- 实现截图自动清理功能,保留最近30天文件
- 建立截图文件命名规范:
-
多版本选择器管理:
- 在package.py中添加选择器版本控制逻辑
def get_selector(selector_name, version="v2"): if version == "v2": return selectorsV2[selector_name] return selectors[selector_name]
六、源码下载
- 通过影刀RPA客户端应用市场获取。
- 私聊
七、后续扩展方向
- 增加流程监控:实现流程执行状态的实时监控和告警
- 集成OCR功能:增加光学字符识别能力,处理图片中的文字信息
- API接口开发:提供外部调用接口,支持与其他系统集成
- 用户界面优化:开发更友好的配置界面,减少手动修改配置文件
- AI能力增强:引入机器学习模型,提高复杂场景的自动化处理能力
- 移动端支持:扩展支持移动端应用的自动化操作
- 多语言支持:增加对多语言界面的适配