最近花了两周时间,把Robocorp和Robot Framework这套RPA技术栈的一级课程完整过了一遍。所谓一级课程,就是Robocorp新手认证体系里的第一档:面向零基础,目标是让你能独立开发一个简单机器人,跑通本地运行,甚至部署到云端。我边学边记边踩坑,这篇就把我的完整学习过程、环境配置、语法要点、实战样例和避坑经验一起整理出来。
如果你正打算入门RPA,或者已经听说过Robot Framework但一直没动手,这篇正好是你的第一份作业指南。一级课程不需要任何编程基础,但如果你会一点Python,学起来会轻松非常多。
1. 我为什么盯上Robocorp和Robot Framework这套组合
先说动机。我日常有大量重复性工作:定时从系统导出数据、清洗、填到另一个平台,一个月有接近三分之一的时间耗在这上面。我决定找一个能长期使用的自动化方案,而不是写一次性脚本。
选型时我把市面上的RPA方案大致过了一遍:UiPath、Power Automate、国内几家商业RPA,还有开源路线。最后落到了Robot Framework加Robocorp上。原因有三个:
- 它不吃配置,不需要安装一整套庞大的商业客户端,VS Code加一个插件就够了。
- 它是代码优先,所有逻辑都是文本文件,方便用Git管理,也好排查问题。
- 它背后是成熟的开源社区,Robot Framework已经有十几年历史,网上能搜到大量案例和资料。
1.1 先把五个容易搞混的名字理清
一级课程第一节课,最容易让人晕的就是这几个名字。我刚开始也分不清,后来用一句话给它们各贴了个标签:
| 名词 | 它是什么 | 一句话理解 |
|---|---|---|
| RPA | 机器人流程自动化 | 用软件代替人操作软件,本质是自动化 |
| Robot Framework | 开源自动化框架 | 负责组织和执行自动化任务,核心是关键字驱动 |
| Robocorp | 围绕RF做RPA的公司和平台 | 提供VS Code插件、命令行工具、云端编排 |
| rcc | Robocorp的命令行工具 | 创建隔离环境、打包、运行机器人的底层工具 |
| rpaframework | Robocorp维护的Python库集合 | 里面包含RPA.Browser、RPA.Excel.Files等库 |
把这五个名字分清楚,后面看任何文档都不会发怵。
1.2 为什么不像很多人推荐的那样直接选UiPath
我不是说UiPath不好。它在企业级复杂流程编排上确实强,拖拽式设计器对业务人员友好。但它有两个对个人开发者不太友好的地方:
第一,学习曲线其实不低。拖拽画布只是看起来简单,真正要处理异常、并发、数据映射时,你需要理解一堆组件概念,并不比写代码轻松。
第二,授权和部署模式对轻量使用不友好。一个人做几个小自动化,用商业RPA平台显得笨重,而且你无法完全掌控运行细节。
Robocorp这边的好处是,你写的就是文本和代码,所有运行时的日志、依赖、环境都是透明的。出了问题可以一层层追下去,而不是在一个黑盒里猜。
一句话总结我的选型逻辑:如果只是偶尔跑几个自动化任务、想保留对代码的完整控制权、又不想一上来就陷进商业软件庞大的知识体系,这套组合性价比最高。
2. 环境搭建与工程结构:第一课最值得花时间弄懂的部分
很多人学RPA上来就想写"点击鼠标"的脚本,结果卡在环境上。我建议一级课程老老实实按这个顺序来:装好工具,建出项目,看懂文件,再谈写任务。
2.1 三分钟建出第一个项目
准备清单如下:
- 安装Python 3.9以上版本,安装时勾选Add to PATH。
- 安装Visual Studio Code。
- 在VS Code的扩展市场搜索Robocorp Code,安装并重启。
- 点击VS Code侧边栏的Robocorp图标,登录Robocorp Cloud账号。推荐注册一个免费账号,因为rcc运行时需要身份校验,后面部署也要用。
接下来点击新的Project,选择模板。一级课程我建议选最简单的"Simple"模板,或者浏览器自动化模板。它会自动生成一个可运行的demo任务,你只需要在任务文件上点Run,就能看到机器人跑起来。
我第一次跑通的时候觉得还挺神奇的:一个文本文件点一下,浏览器自动打开,自动操作,最后自动关闭。整个过程没有任何拖拽画布。
2.2 工程文件到底谁是谁
新建出来的项目看起来文件不少,但核心就这几个:
. ├── robot.yaml # 任务编排配置,声明有哪些task以及用什么命令运行 ├── conda.yaml # 依赖声明,Python版本、pip包、conda包 ├── tasks.robot # 机器人本体,核心自动化逻辑 ├── devdata/ # 本地开发数据,比如input.json模拟云端输入 └── output/ # 运行产物,日志、截图、报告我挑robot.yaml里最关键的字段解释一下:
tasks: run_task: shell: python -m robot --report NONE -d output tasks.robotshell字段声明了执行任务时实际运行的命令。理解这一点特别重要:Robocorp体系里,运行机器人本质上就是执行一行命令。--report NONE的意思是不要生成额外的报告文件,-d output把运行产物放到output目录。
conda.yaml则是环境的配方:
channels: - conda-forge dependencies: - python=3.9.13 - pip - pip: - rpaframework==14.1.0每次第一次运行时,rcc会按照这个文件用conda创建一个隔离的Python环境,并把rpaframework装进去。这就是为什么第一次跑项目通常会比后续慢很多。
2.3 环境坑:conda慢和浏览器驱动缺失
我实际踩过的坑有两个,都很典型。
第一个是conda创建环境特别慢。如果你在网络条件一般的情况下直接用官方源,可能等十分钟以上。解决方法是给conda配置国内镜像源,或者干脆不走conda:在robot.yaml里把shell命令改成直接用当前Python解释器运行,并在Robocorp Code设置里选择"使用已有Python解释器"。这个办法在快速调试阶段非常好用,能省掉大量等待时间。
第二个是浏览器自动化时驱动缺失。无论是Selenium还是Playwright内核的库,第一次打开浏览器都要自动下载驱动。如果下载失败,任务会报类似WebDriverException: Message: unknown error: cannot find Chrome binary的错误。解决思路就两个:确认电脑装了Chrome或Edge浏览器,或者手动指定浏览器驱动路径。
3. Robot Framework语法速览:记住这些规则就能动手写了
Robot Framework最劝退新手的点,是它的语法和普通编程语言完全不一样,看起来像表格。但只要记住几条规则,读起来比Python还直观。
3.1 关键字驱动的核心逻辑
一个.robot文件由若干section组成,每个section以*** ***开头:
*** Settings ***:导入库、加载资源文件*** Variables ***:定义变量*** Tasks ***:一级课程里主要写的自动化任务*** Keywords ***:自定义关键字
关键字驱动的意思是:每一行都是一句自然语言风格的指令,指令背后由库里的Python代码实现。比如:
*** Tasks *** 打开搜索页并查询 Open Available Browser https://www.baidu.com Input Text id=kw Robocorp Click Button id=su不用解释,你也能看懂它在干什么。这就是Robot Framework最大的优点:代码即文档。你写出来的任务文件,别人拿过去也能快速读懂流程。
需要注意的语法细节有三个:
- 单元格之间至少两个空格分隔,推荐统一用四个空格,避免视觉混乱。
- 关键字名和参数大小写不敏感,单词之间有几个空格也无所谓。
- 任务体必须有缩进,否则框架会报语法错误。
3.2 变量、分支、循环,三样就够
变量定义在Variables区:
*** Variables *** ${USERNAME} admin ${PASSWORD} secret @{SITES} site1.com site2.com使用时用${USERNAME}引用标量,用@{SITES}引用列表。
分支和循环在Robot Framework 5之后写起来和主流语言差不多:
IF ${count} > 10 Log Too many items ELSE Log OK END FOR ${site} IN @{SITES} Log Processing ${site} END我见过很多初学者一开始就疯狂背内置关键字列表,其实没必要。一级阶段掌握Log、Sleep、Wait Until Keyword Succeeds这几个常用关键字,加上控制流,已经能写出完整任务了。
4. 用RPA官方库干真实的事:浏览器、Excel、文件一次搞定
语法只是骨架,真正干活靠的是rpaframework提供的一堆RPA库。一级课程里最常用的四个库,我逐个说。
4.1 RPA.Browser.Selenium的使用逻辑
浏览器操作是这个库的核心场景:
*** Settings *** Library RPA.Browser.Selenium *** Tasks *** 登录系统并下载日报 Open Available Browser https://internal.example.com Input Text id=username ${USERNAME} Input Password id=password ${PASSWORD} Click Button css=.login-btn Wait Until Element Is Visible css=.report-table Click Link css=a.download这里最关键的是那句Wait Until Element Is Visible。网页加载慢是常态,元素还没渲染出来就去点击,必然失败。新手最常见的报错就是找不到元素,八成是没加等待。
4.2 RPA.Excel.Files读数据
Excel在办公自动化里出现频率极高。比如读取一个销售明细Excel,对每行做处理:
*** Tasks *** 读取Excel数据 Open Workbook sales.xlsx ${rows}= Read Worksheet As Table header=True Close Workbook Log ${rows}Read Worksheet As Table返回的是列表套字典的结构,每一行是一个字典,字典的键是列名。拿到这个结构之后,配合FOR循环就能逐行处理。这个设计非常实用,比按单元格坐标取数容易维护得多。
4.3 RPA.FileSystem和RPA.HTTP配合使用
文件系统库负责文件增删改查,HTTP库负责下载。比如把下载的报表归档:
*** Tasks *** 下载并归档 RPA.HTTP.Download https://example.com/report.xlsx target=./output/report.xlsx RPA.FileSystem.Move File ./output/report.xlsx ./archive/report.xlsx overwrite=True用HTTP直接下载文件,比在浏览器里模拟点击下载更稳定。浏览器点击下载会涉及下载目录、窗口弹窗等不确定性,而HTTP库就是一次干净的网络请求。
4.4 RPA.Dialogs做人工确认交互
有些流程必须人来决策,比如输入验证码或确认金额。RPA.Dialogs能在自动化中途弹出对话框接收输入:
*** Tasks *** 需要人工确认的流程 ${answer}= Ask For String message=请输入验证码 placeholder=验证码 Log 用户输入:${answer}这个库对真实办公场景非常有用。自动化不一定要完全无人化,把重复部分自动化、关键节点留给人工,这种混合模式在实际项目里存活率最高。
5. 跑通后的调试与避坑实录:一级课程里最常见的翻车现场
环境搭好、语法会写之后,真正消耗时间的是排错。我把一级课程里遇到的高频问题整理成了一张脑内排查表。
5.1 定位器失效,今天能跑明天不能跑
网页自动化的大部分报错都来自元素找不到。原因通常是页面结构变更、按钮加载慢,或者页面存在多个同名元素。
我的处理套路是:
- 优先用稳定性高的定位方式,优先级大致是id大于css大于xpath。
- 定位有多个结果时,用父级元素缩小范围,或者用索引指定第几个。
- 加显式等待,而不是写死Sleep。
- 实在定位不到,先把页面截图打出来看现场再动手改:
RPA.Browser.Selenium.Capture Page Screenshot screenshot.png5.2 浏览器二进制找不到
报错信息的典型样子是:
WebDriverException: Message: unknown error: cannot find Chrome binary这通常意味着库在系统路径里找不到Chrome或Edge。解决办法是先确认浏览器是否安装,再确认位数和版本是否匹配。如果还是不行,在Open Available Browser里显式指定浏览器可执行文件路径:
Open Available Browser https://example.com executable_path=C:/Program Files/Google/Chrome/Application/chrome.exe5.3 中文乱码问题
中文内容写进CSV或者读Excel出现乱码,基本可以断定是编码没指定UTF-8。RPA库内部多数默认UTF-8,但Windows控制台和某些文件接口的默认编码不一定一致。遇到乱码,先确认读取和写入的文件编码声明,再通过RPA.FileSystem指定编码,或者直接用Python的open函数处理文件。
5.4 依赖相关问题的对照清单
| 现象 | 可能原因 | 处理思路 |
|---|---|---|
| conda创建环境特别慢 | 默认源在国外 | 配置国内镜像源 |
| 依赖安装失败 | 版本号冲突 | 换稳定版本号,比如rpaframework指定某个已知可用版本 |
| 运行时报ModuleNotFoundError | 环境和当前解释器不一致 | 检查robot.yaml的shell命令和PYTHONPATH配置 |
| output目录越来越乱 | 没有清理 | 在robot.yaml里运行前加清理命令 |
5.5 log.html是第一排查现场
只要任务跑起来,output目录里就会生成log.html。这个文件详细到每一行关键字的开始时间、耗时、参数、返回值和报错详情。遇到任何莫名其妙的问题,第一反应应该是打开log.html,看实际执行的每一步发生了什么,而不是反复猜测代码哪里不对。
6. 从本地到云端:把任务部署到Robocorp Cloud
学会了写机器人,在本地能跑通,下一步就是让它脱离我的电脑定时运行。Robocorp Cloud,现在也叫Control Room,就是干这个的。
6.1 上传一个Process
在VS Code的Robocorp插件里,登录账号后可以选择Deploy,把一个本地任务打包上传。云端会根据conda.yaml配置好环境,然后执行robot.yaml里定义的task。
这里有两个核心概念要理解:
- Process,对应一个打包好的项目,可以理解成你发布的一个应用。
- Run,一次执行实例。每跑一次都会生成运行日志和产物,可以在网页上查看。
6.2 定时调度和Work Items
上传之后,在控制台配置schedule,就可以让机器人每天凌晨自动运行。如果任务需要不同的输入数据,Robocorp的Work Items机制可以把JSON数据作为输入传给任务。本地开发时,devdata/input.json就是用来模拟云端输入的。
*** Settings *** Library RPA.Robocorp.WorkItems *** Tasks *** 读取Work Item ${payload}= Get Work Item Payload Log ${payload}6.3 从第一天就用Work Items的习惯
我的个人建议是:即使暂时不打算上云,写任务时也尽量通过Work Items读取输入,而不是硬编码路径。这样将来想部署到云端,代码不用大改。一级课程虽然不会强制要求上云,但养成这个习惯,后面学二级课程会顺畅很多。
7. 一级课程结束后,给同样零基础的人三条建议
最后分享三件我完成一级课程后最想告诉当初自己的事。
第一,不要试图一开始就看懂所有库。一级课程唯一的目标是跑通一个真实任务。先做最小闭环:打开浏览器、填表、点击、读取结果。这个闭环跑通了,你才会对整套体系产生信心。
第二,保持任务先行。每学一个新库,就找一个身边的重复劳动来练。比如把每周下载Excel并重命名的活自动化,或者把每天填一张网页表单的流程写成机器人。做完之后你会发现,真正留在大脑里的不是语法,而是解决问题的判断力。
第三,遇到问题先看log.html,再尝试自己搜。RPA报错信息五花八门,但绝大多数坑已经有人踩过。搜索时用"Robot Framework加报错关键词"这种组合,命中率非常高。
这就是我一级课程的完整学习记录。这套技术栈最让我满意的地方是它鼓励你写可维护的自动化代码,而不是一次性脚本。即使将来不专职做RPA,学会这套方法,对处理各种重复性的工作也很有帮助。