网页自动化:让机器人操作网站
核心只有一个问题:机器人怎么"看见"你要点的那个按钮。
学习目标
- 说出网页自动化的三条路,并说明什么需求该走哪一条
- 把"界面元素"与嵌套关系讲清楚,并说明"元素特征 = 一组属性 + 值、全部匹配才算存在"
- 对比"有目标命令"和"无目标命令",说清该优先用哪种、为什么
- 用"从界面上选取"和"从界面库选择"两种方式选元素,并说清界面库的共享范围
- 诊断"漏选"和"错选",用通配符 / 取消勾选 / 父元素锚点三副解药修复
- 说出 UI 分析器的四件事,以及三种浏览器在扩展上的准备差异
预计用时:读课 35 分钟 + 上机 45 分钟 | 前置知识:第 3~6 课(变量、条件、循环、数组与字典——抓取结果是数组、元素特征全是"键 + 值") | 本课性质:操作 + 概念课,认证里"界面元素自动化"考点的集中区,也是第七部分的收官
知识地图
前面几课操作的是你电脑上的软件(Excel、Word、Outlook),本课第一次让机器人操作浏览器里的网页。它承接第 9 课 Email 打开的那条"联网线",也是第七部分(网络与网页自动化)的收官:从此机器人不只会用本机软件,还会替你上网办事。
一、网页自动化有三条路
同一个"让机器人上网干活"的需求,官方提供了三种实现方式。它们不是互相替代,而是各有各的脾气:[1]
Get获取数据 / Post提交表单。快,但要懂接口。1.1 三条路各自的性格
| 路线 | 它像什么 | 强在哪 | 弱在哪 / 前提 |
|---|---|---|---|
| ① 界面元素自动化 | 一个坐在电脑前的人 | 什么网站都能上,登录、点按、填表都行 | 网页一改版就可能要重选元素 |
| ② 数据抓取 | 一把"复制粘贴的钳子" | 一条命令把成组数据读成数组,还能自动翻页 | 只适合"按列表/表格成组出现"的数据 |
| ③ HTTP 请求 | 一条直接打给服务器的电话 | 不打开浏览器,速度最快 | 要懂接口地址和参数,网站没接口就用不了 |
为什么会有三条路?因为"机器人上网"可以站在两个不同的高度做事。① 是站在用户界面这一层——和人看到的一模一样,稳定、通用但不快;②③ 是站在数据这一层——绕开界面直接取数,快,但要求网页结构规整或网站提供接口。先想清楚"我是要像人一样操作,还是只要把数据拿走",路线自然就定了。
选型口诀:要"像人一样操作"选 ①;批量采数据选 ②;有接口、求速度选 ③。认证题里常给你一个场景问"最适合用哪条",照着这句判断即可。
二、一切从"界面元素"开始
鼠标底下每一个小图形部件——按钮、输入框、菜单项、表格单元格——都叫界面元素。元素还能嵌套:整个表格是一个元素,每一行是子元素,每个单元格是孙元素。[1]
2.1 元素与嵌套:像"文件夹里套文件夹"
把网页想成一层层的文件夹:最外层的页面是一个大盒子,里面装着表格、按钮、输入框;表格里又装着若干行;每一行里再装单元格。这种"盒子里还有盒子"的关系就叫嵌套。
页面
└─ 表格(父元素)
├─ 第 1 行(子元素)
│ ├─ 单元格 A(孙元素)
│ └─ 单元格 B(孙元素)
└─ 第 2 行(子元素)
└─ ……
为什么要先懂嵌套?因为后面修"错选"时,最常用的办法就是拿稳定的父元素或子元素当锚点,再顺着这棵树找到真正的目标。
官方特别提醒:如果你学过"控件",请先暂时忘掉它——"界面元素"和"控件"不完全一样,混用概念容易出错。
2.2 元素的"身份证":一组"属性 + 值"
机器人怎么认出一个元素?靠的不是位置(鼠标现在停在哪),而是这个元素身上的一组特征。点"目标"属性右侧的"纸和笔"编辑按钮,就会看到元素是由一行行的"属性 = 值"描述出来的——这就是元素的"身份证"。
aaname = "6800" ← 一个属性 + 一个值 ……(其余属性行)
把上面每一行读成一句话:"这个元素的 aaname(名称)等于 6800"。一行就是一个条件。
核心规则(务必记牢):只有所有勾选的属性全部匹配,机器人才认为这个元素"存在"。就像找一个人:你说"他姓张、戴眼镜、穿红衣服",必须三条全中才算;只中两条,这个人就不算你要找的那个。后面所有的漏选、错选,全都是这条规则在起作用——多一个条件就可能漏选,少一个条件就可能错选。
记忆技巧:把"元素特征"记成"与条件"(AND),而不是"或条件"(OR)。匹配不是"命中任意一条就行",而是"条条都要对得上"。
三、有目标 vs 无目标:优先用有目标
网页命令分成两大家族。分清的标志,就看这条命令"心里有没有一个具体的目标元素"。
| 有目标的命令 | 无目标的命令 | |
|---|---|---|
| 例子 | 点击目标、设置元素文本、获取元素文本 | 模拟点击、模拟按键 |
| 运行前 | 先查找元素是否存在,存在才操作 | 鼠标/键盘在哪就操作哪,无法验证 |
| 找不到时 | 反复查找,超过"超时时间"后报错并停止 | 照样点下去,点错了也不知道 |
结论:优先用有目标命令,精准可控;只有实在找不到目标时,才退而用无目标命令。原课给的例子里,无目标命令叫"模拟点击""模拟按键"——名字里的"模拟"二字,正是它"只管动手、不管对象对不对"的写照。
为什么优先有目标?无目标命令像一个蒙着眼睛的人,你喊"点下去"它就点下去,鼠标底下恰好是什么它不管。有目标命令则先"睁眼确认":我要点的那个元素在不在?在,我才动手。这一句"在不在"的确认带来两个好处——① 点错的风险大幅下降;② 万一元素没加载出来,它会明确报错停下,你立刻知道出事了,而不是默默把流程跑歪。
考点提醒:认证喜欢问"应优先使用哪类命令",答案永远是有目标命令;"无目标命令什么时候用",答案是"实在选不到目标时才退而求其次"。
四、怎么选一个目标
在命令上点"未指定"右侧的瞄准器图标,会出现两个选项:[1]
4.1 从界面上选取
- 点击瞄准器:在命令的"目标"属性右侧点瞄准器图标,选"从界面上选取"。
- 页面被遮罩盖住:此时网页会被红边蓝底的一层遮罩盖住,鼠标移动到哪里,遮罩就跟到哪里。
- 让遮罩"恰好"盖住目标:慢慢移动,直到遮罩恰好覆盖你要的按钮/输入框,再单击左键。不要盖到外面的大盒子,也不要只盖到里面的小字。
- 看遮罩上方的提示:遮罩上方会显示元素类型(按钮 / 输入框…),帮你确认选对了类型。
- 确认:松手后元素被记进这条命令。建议立刻用 UI 分析器的高亮功能回看一眼,确认无误。
4.2 从界面库选择
选过的元素会自动存进界面库。下次要给别的命令指定同样的元素时,直接点"从界面库选择",挑出已经调好的那个即可,不必重新瞄一遍。
| 共享范围 | 是否共享 |
|---|---|
| 同一流程内的不同流程块之间 | 共享——选一次,多个流程块都能用 |
| 不同流程文件之间 | 不共享——换一个流程就要重新选或另行导入 |
一句话记住共享范围:"流程内共享,流程间不共享"。认证常拿这句设坑,答成"全局共享"就错了。
什么时候改用界面库?同一个元素要被好几条命令用到时(比如搜索框既要"设置元素文本"又要"获取元素文本"),从界面库复用最省事,而且改一次属性、处处生效——维护起来也轻松。
五、核心考点:漏选与错选
元素选好了,运行时却可能出两种毛病。它们刚好是"全部匹配才算存在"这条规则的两面:
| 故障 | 现象 | 原因 |
|---|---|---|
| 漏选 | 元素明明在,却报"找不到" | 特征里某个属性会变化(比如单元格文字 aaname="6800",一刷新就变) |
| 错选 | 找到了,但找到的是别的元素 | 剔除属性后,兄弟元素的特征变得一模一样,于是找到第一个符合的 |
两种毛病的病根正好相反:条件太"死"→ 漏选;条件太"松"→ 错选。所以修元素不是"删得越多越保险",而是在稳定和区分度之间找平衡。
条件太死 → 漏选: aaname = "6800" ← 数字天天变,今天变 7200 就找不到 条件太松 → 错选: (只留一个所有兄弟都相同的属性)← 找到第一个就返回,可能是别人
5.1 三副解药
- 通配符
*:把会变的部分换成*。例如aaname由"姓名:张三"改为"姓名:*",既避开变化,又保留区分度。 - 取消勾选会变的属性——能减少漏选,但要小心增加错选。
- 用稳定的父/子元素做锚点,再用"获取父元素/获取子元素"找到真正的目标。
为什么通配符这么常用?因为它保留了两样东西:会变的那一小段放开了,不会变的固定前缀还留着当区分度。"姓名:*"既能匹配"姓名:张三",也能匹配"姓名:李四",还不会误伤"工号:*"——它是"放宽而不放空",比直接删掉整个属性细腻得多。
为什么官方强调"错选更危险":漏选时命令会抛异常、流程立刻停下,容易发现;错选时流程照样往下跑,错误悄无声息。所以删属性一定要谨慎。
三个高频易错点:
- 把会变的属性写死 → 漏选。像金额、日期、行号这种每次都变的属性,如果原样留在特征里,今天能跑、明天就报"找不到"。
- 删属性过多 → 错选。为了治漏选一口气删掉好几行,结果兄弟元素的特征变得没差别,机器人找到第一个就返回——而且是静默出错,最坑。
- 环境不一致 → 时好时坏。同一个元素在 Chrome 和 IE 上特征可能完全不同,开发和运行分别用了不同系统/浏览器,就会出现"我这儿好好的,换台机器就崩"。
六、UI 分析器:排错的手术刀
UI 分析器是独立工具(首页"工具"标签、工具栏、元素属性里都有入口),主要干这些事:[1]
| 能力 | 能帮你做什么 |
|---|---|
| 可视化树 | 看清元素的父、子、兄弟关系——错选往往就发生在兄弟之间。 |
| 校验目标 | 改完属性,直接验证还能不能找到该元素。 |
| 高亮显示元素 | 确认找到的是不是你要的那个(在页面上把它闪出来)。 |
| 保存到界面库 | 把调好的元素存起来,后续命令直接复用。 |
调元素的正确顺序:先在可视化树里看清目标跟兄弟有什么不同 → 选出有区分度的属性 → 用"校验目标"验证 → 用"高亮"肉眼确认 → 满意后"保存到界面库"。走完这一圈,元素基本就稳了。
七、浏览器:为什么建议用内置浏览器
命令:启动新的浏览器 打开一个;绑定浏览器 接管已打开的浏览器。类型可选 IE、Chrome、以及内置的来也浏览器(Laiye Browser)。[2]
| 浏览器 | 要点 |
|---|---|
| 来也浏览器(推荐) | 无需装扩展;能选跨域网页元素;可直接调用页面内 JavaScript |
| Chrome | 必须安装并启用扩展(Laiye Native Message Plugin),否则只能选到整个页面 |
| Firefox | 同样需要扩展 |
| IE | 某些银行、政府网站只能用 IE |
为什么浏览器还要装扩展?机器人要"看见"网页内部的一个个元素,需要在浏览器和 APA Creator 之间搭一座小桥,扩展就是这座桥。没装桥,机器人只能看到一整张页面,选不到里面具体的按钮和输入框——这也解释了为什么"在 Chrome 里只选到整个页面"往往就是扩展没装好。
环境一致性:同一个元素,在 Chrome 和 IE 上特征可能完全不同;不同系统/浏览器也会变。开发和运行尽量用同一套环境,少踩坑。
易错点:① Chrome 没装/没启用扩展就开始选元素,结果"选来选去只有整个页面";② 开发用 Chrome、投产用 IE,元素特征对不上,流程在别的电脑上失灵。动手前先确认"哪台机器、哪个浏览器、扩展装没装"三件事一致。
八、常用网页元素命令
| 命令 | 用途 |
|---|---|
| 判断元素是否存在 | 输出 True/False,用来等页面加载,替代死等延时 |
| 点击目标 | 点击按钮、链接、单选项 |
| 设置元素文本 / 获取元素文本 | 填输入框 / 读文字 |
| 设置 / 获取元素勾选 | 单选框、多选框 |
| 等待元素 | 等它出现或消失(比"延时"更稳) |
| 获取子元素 | 按"子元素层级"取一批元素(是数组),可循环处理 |
两条命令的搭配:"等待元素"负责等它出现,"判断元素是否存在"负责问它在不在,两者都比写死的"延时"更稳——网页加载快了不浪费时间,加载慢了也不会抢跑。获取子元素拿回的是数组,正好用第 6 课学的循环去逐条处理,这就是第 10 课和第 6 课接上的地方。
命令属性细节见 参考页:网页自动化速查;全部课程地图见 课程地图。
本课小结
必记要点
- 三条路:界面元素自动化(像人一样操作,本课重点)、数据抓取(成组数据读成数组)、HTTP 请求(绕过浏览器,要懂接口)。
- 界面元素可以嵌套(表格 → 行 → 单元格);元素的"身份证"是一组 属性 = 值,所有勾选的属性全部匹配才算存在。
- 命令分有目标(先确认元素存在再操作)与无目标(点到哪算哪),优先用有目标。
- 选目标两种方式:从界面上选取(遮罩须恰好盖住目标)与从界面库选择;界面库流程内共享、流程间不共享。
- 两大故障:漏选(属性会变却写死,报"找不到")与错选(属性删太多,找到兄弟元素)。三副解药:通配符
*、取消勾选、父/子元素锚点。 - 错选更危险,因为它不报错、流程会继续跑。
- UI 分析器四件事:可视化树、校验目标、高亮显示元素、保存到界面库。
- 浏览器:来也浏览器免扩展、可跨域、可调 JS;Chrome/Firefox 需装扩展;IE 应对特定网站。开发与运行环境尽量一致。
自测
不看上面,凭记忆作答。答错不要紧,解析会告诉你为什么。
上机实践(回到 Windows)
准备(先做对三道选择题):① 用哪台电脑?② 用哪个浏览器?③ 扩展装了没?建议先用来也浏览器(免扩展、少踩坑)。记住:开发和运行用同一套环境。
任务 A(跑通一次搜索):用 启动新的浏览器 打开 www.bing.com,用"从界面上选取"给 设置元素文本 选搜索框、填 机器人流程自动化,再给 点击目标 选搜索按钮,运行。
预期:搜索框出现"机器人流程自动化",页面跳到搜索结果。常见报错:只选到"整个页面" → 多半是 Chrome 没装/没启用扩展。
任务 B(体验界面库):再拖一条 获取元素文本,点"从界面库选择",复用刚选的搜索框元素,读回你输入的文字。预期:输出 机器人流程自动化。要体会的:选一次、多处用,这就是界面库流程内共享的价值。
任务 C(故意制造漏选,重点):本题要你亲手把"漏选"请出来,再把它治好,前后对比才有感觉。步骤:
- 选一个会变的元素:在搜索结果里选一个标题(它的文字会随搜索词变化)。
- 看它现在长什么样:打开"目标"属性右侧的"纸和笔",记下当前所有属性行的属性名 + 值(建议截图,这就是"修好前")。
- 让它翻车:把搜索词改掉(比如换成
RPA)再运行一次。预期:报"找不到元素"——这就是漏选,因为原来写死的标题文字变了。 - 找病灶:对比两次运行,判断哪一行属性"也跟着变了"——那一行就是会变的属性。
- 上第一副解药:把会变的那段值改成通配符
*,只保留固定前缀。例如把"标题:完整的一句话"改成"标题:*"。 - 验证:用 UI 分析器"校验目标"确认能找回,再"高亮显示元素"肉眼看一眼是不是你要的那个。
- 再跑一次:换回原搜索词、再换新搜索词各跑一遍,都能找到即为修好。
- 交作业:把"修好前"的属性值和"修好后的属性值"两段对比发我,并告诉我你删/改了哪一行。
任务 D(别用死等):把流程里的固定延时改成 等待元素 或"判断元素是否存在 循环"。说说为什么这样更稳——加载快时省时间,加载慢时不抢跑。
任务 E(进阶辨析):如果你把通配符改得太宽(比如整行都换成 *),会发生什么?试着制造一次错选,观察它不会报错、只是安静地找错了元素——亲手体会一次"错选为什么更危险",再把你怎么判断的告诉我。
选不到元素、报错看不懂,把目标编辑框的属性截图 + 完整报错发我。
精读一手来源
本节首选:《开发者指南(第一辑)· 界面元素自动化》——完整讲了选取、目标编辑、漏选/错选、UI 分析器,认证必读。
读时重点盯三处:① "元素特征由属性组成、全部匹配才存在"这句总规则;② 通配符 * 的用法;③ UI 分析器四个功能。
配套练习页面:练习场 · 虚拟台账(专门用来练漏选/错选)。
浏览器相关命令见 《第一辑 · 软件自动化》。