影刀RPA进阶教程:元素属性与样式提取——颜色、文本与隐藏判断
影刀RPA进阶教程:元素属性与样式提取——颜色、文本与隐藏判断
做电商数据核对,最烦的不是采集本身,而是判断页面状态:这个按钮到底能不能点、这个标签是红色告警还是灰色正常、这个元素是不是被隐藏了。靠人眼一个个看不现实,用影刀RPA可以把元素的颜色、文本、属性、可见状态全部读出来变成变量,让流程自己判断,人只看结果。
我自己是做电商运营的,非技术出身,用影刀RPA两年多,踩得最多的坑就在"读元素"这一步。明明页面上看得到文字,获取元素文本内容却返回空;明明看着像个复选框,用对应指令却怎么都不生效,排查到最后发现状态藏在伪元素里。
这篇文章把元素属性与样式提取的完整打法整理出来:从获取元素信息(web)的六种操作,到用执行JS脚本读取颜色和样式,再到用IF元素可见(web)判断隐藏状态,每个环节配实际案例和踩坑记录,照着做就能把页面状态变成流程里的判断条件。
环境与界面:装好影刀RPA再动手
先把基础铺平。影刀RPA客户端从官网下载安装,一路下一步即可。装完第一件事是装浏览器插件:打开影刀客户端,左侧进"设置",在浏览器扩展里给Chrome或Edge装上插件,否则网页元素捕获会失败,这是新手第一大坑。
界面看三块就够用:左上是指令区,所有指令按分类摆放,顶部有搜索框;中间是流程画布,指令拖进来连线执行;右侧是指令详情面板,选中某条指令后在这里填参数。元素库在画布上方,捕获过的元素都存在里面,可反复复用。
社区版每天有30分钟运行时长,练手和中小流程完全够;跑量大以后再考虑创业版或企业版。本文用到的指令社区版都能跑,不用担心版本门槛。
元素定位四合一:捕获、XPath、CSS与正则的分工
读属性的前提是定位准。影刀RPA的定位体系是"四合一":元素捕获、XPath、CSS选择器、正则表达式,各自管一段,别指望一个工具打天下。
日常优先用捕获:点击顶部工具栏的"捕获元素"按钮,浏览器自动跳转,鼠标移上去出现橙色边框后点击确认,元素就进了元素库。自动捕获解决不了的(动态class、按文本找、跨层级找),再上手写XPath。
| 定位方式 | 适用场景 | 上手难度 |
|---|---|---|
| 元素捕获 | 结构稳定的目标元素 | 低 |
| XPath | 按文本定位、层级与参照物定位 | 中 |
| CSS选择器 | 按class或id快速匹配 | 中 |
| 正则表达式 | 从文本中提取模式化内容 | 高 |
XPath和CSS怎么选:要按文本找元素、要跨层级找父子兄弟,用XPath;只要按id、class锁定,CSS更短更好写。两把刀都要会,单靠一个会遇到瓶颈。
# 捕获元素:商品卡片中包含"¥"的价格元素(文本模糊匹配) //*[contains(text(),'¥')] # 捕获元素:class包含price的元素(CSS写法,同样场景) //div[contains(@class,'price')] # 捕获元素:通过"库存"文字定位到它的兄弟价格元素(参照物定位) //*[contains(text(),'库存')]/following-sibling::*[1]正则表达式不是用来定位的,是用来提取的:价格里的数字、日期里的年月日,用影刀的文本提取配合正则一次抽干净。一句话记住四合一分工:捕获定目标,XPath和CSS负责找到它,正则负责洗干净它带回来的数据。
获取元素信息(web):六种操作一次讲透
读文本和属性的主力指令是【获取元素信息(web)】。指令面板搜索"获取元素信息",拖进流程,第一步选网页对象——就是之前用【打开网页】或【获取已打开的网页对象】指令创建的那个变量。
操作下拉里有六项,用途完全不同,选错了就拿不到想要的东西:
- 获取元素文本内容:拿页面上可见的显示文字
- 获取元素源代码:拿元素对应的网页源代码(HTML)
- 获取元素值:拿输入框里的数值
- 获取网页链接地址:拿超链接和图片的地址,可勾选自动补充http前缀
- 获取元素属性:按属性名拿值,比如href、src、class
- 获取元素位置:拿元素的坐标和宽高
结果保存到变量,后面接【打印日志】先看一眼拿没拿到,这是我的固定调试动作。等待元素存在(s)按页面加载速度适当调大,避免加载慢的网站超时报错。
我第一次做价格监控,用"获取元素文本内容"抓促销价,返回一直是空。排查了半小时才发现那个价格写在input的value里,改用"获取元素值"一下就通了。可见文字和控件值的区别,就是文本内容和元素值的区别,记住这条能省掉很多冤枉路。
用元素源代码判断元素类型和状态
很多页面元素"看着像X其实是Y"。判断标准很简单:按F12打开开发者工具,看元素标签。INPUT是输入框或复选框,SELECT是标准下拉框,标签不对,对应指令就不会生效,这一点后面下拉框那篇还会展开。
更细的类型看属性:input的type是text就是文本输入框,是checkbox就是复选框。这些都能用【获取元素信息(web)】的"获取元素属性"读出来,也可以直接用"获取元素源代码"把标签和类型一起拿到。
我实际用过的一个场景:淘宝筛选里的"赠送运费险",勾选和取消勾选时,包含复选框的父元素会有data-action属性,不勾选就没有。做法是捕获这个父元素,用"获取元素源代码"拿源码,再用If判断源代码里是否包含data-action,包含就是已选中。这类data-开头的自定义属性是判断前端状态的宝藏,比看图片颜色靠谱得多。
颜色与样式提取:执行JS脚本读计算样式
颜色、字体这类样式信息,获取元素信息拿不到,要用【执行JS脚本】指令。指令在网页自动化分类里,参数三样:网页对象、要执行的javascript、存储脚本执行结果至。脚本必须写成javascript函数形式,这是硬要求。
比如读一个状态标签的文字颜色和背景色:
// 捕获元素:订单状态标签// 返回该元素最终生效的字体颜色与背景色,用|拼接function(element,input){varstyle=window.getComputedStyle(element);returnstyle.color+'|'+style.backgroundColor;}执行结果存进变量后,用If判断是否包含"rgb(255"就能识别红色告警。为什么用getComputedStyle而不直接看源码里的style:源码里写的可能被外部CSS覆盖,getComputedStyle拿的是浏览器最终计算出来的值,才和肉眼看到的一致。
伪元素是隐藏更深的状态。有些页面勾选与否,源码属性完全不变,只新增一个伪类元素,而源码又读不到伪元素。官方文档给的方案就是执行下面这段JS:
// 读取元素::before伪元素的内容,用于判断勾选状态function(element,input){returnwindow.getComputedStyle(element,"::before").content;}勾选与不勾选返回值不同,据此判断即可。这个方案我实测好用,非技术出身不需要多懂JS,照抄改个属性名就行。另外标准复选框的选中状态可以直接在元素上执行一段返回element.checked的JS,True是选中,False是没选中,比看样式更直接。
隐藏判断:IF元素可见(web)与IF网页包含的差别
判断元素藏没藏起来,影刀RPA有两个判断指令,混用会误判。【IF 元素可见(web)】检测元素在网页中是否可见,【IF 网页包含】检测网页里是否存在匹配元素。官方文档给过一张对比表,我直接搬过来:
| 场景 | IF网页包含 | IF元素可见(web) |
|---|---|---|
| 元素可见 | True | True |
| 元素隐藏 | True | False |
| 相似元素组 | True | True |
| 元素被遮挡 | True | False |
| 只有网页文本 | True | False |
结论:只想确认"页面上有没有这个东西",用IF网页包含;要确认"现在能不能看见、能不能操作",用IF元素可见(web)。被遮挡也算不可见,这个特性在滚动和点击的坑里还会用到。
写Python节点的话也支持:xbot.web.Browser的is_element_displayed(selector)返回元素是否可见,wait_appear(selector, timeout)等待元素出现,适合放在循环里做等待重试。
变量与批量提取:把属性读成一张表
单个元素读完,列表页要批量读。用【获取相似元素列表(web)】,它自带"获取元素属性"功能,一次把整个列表的class、href等属性批量拿到,再用【ForEach列表循环】逐条处理,这是批量采集的标准骨架。
变量类型在这个场景里的分工:属性值是字符串;相似元素列表是列表类型,循环时取每一项;接口返回的JSON数据先转JSON再用键名取值,键可能不存在的字段用get方式给默认值,避免键不存在直接报错。
流程控制三板斧:For次数循环控制重试次数,ForEach列表循环遍历元素,If条件判断状态分支。把"读属性、判断、执行动作"整段包进Try-Catch,Catch里用【输出日志】记录是哪个元素读失败,流程才不会一处崩全崩。
数据落地与系统联动:读出来的信息存到哪
属性读出来只是中间步骤,落地才算闭环。文本和颜色判断结果写入Excel,用【写入区域】或按行追加;数据量大就先攒进列表再一次性写入,速度差好几倍。颜色状态可以多加一列存"正常/告警",后面筛选方便。
通知走飞书或邮件:抓到红色告警标签时,用【飞书机器人发送消息】推到群里,或用【邮件发送】带Excel附件发出。定时任务在影刀客户端的"计划任务"里配置,我设的是每天早上九点自动跑核对流程,到工位直接看结果。
工程化:把读属性的逻辑封装成子流程
同一个页面读属性的动作会反复用,封装成子流程很划算。做法:画布右键新建子流程,输入参数放网页对象和元素名,输出参数放读取结果,主流程里"调用子流程"传入即可。以后页面改版只改一处。
命名按"模块_动作_对象"来,比如"商品页_读取_促销价颜色",半年后回看不用猜。调试时在关键指令上右键添加断点,单步执行,配合右侧变量面板看每一步的值,比盲跑快十倍,这是我排查读值为空问题的标准动作。
元素属性与样式提取易错速查
| 现象 | 原因 | 解决 |
|---|---|---|
| 文本内容返回空 | 值在input的value里 | 改用"获取元素值" |
| 属性读了是None | 属性名写错或大小写不符 | F12核对属性名 |
| 样式读不到真实值 | 内联样式被CSS覆盖 | 执行JS脚本+getComputedStyle |
| 隐藏判断误判 | 两个判断指令混用 | 按上文对比表选对指令 |
| 伪元素状态读不到 | 源码不含伪元素 | JS读::before的content |
再补三条实战教训:一是class属性往往是一长串,判断时用"包含"而不是"等于";二是页面套了iframe的话,元素要捕获到iframe内部,网页对象层级选对;三是颜色判断别写死单一rgb值,深浅主题下同色系rgb不同,判断关键颜色分量更稳。
学习资源与延伸阅读
官方文档里"获取元素信息(web)"“执行JS脚本”"用元素源代码区分元素类型和状态"这几篇值得反复看,本文的指令参数和方案都有出处。完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,属性提取和隐藏判断两个模块是现成的,导入影刀就能跑。
#影刀RPA #RPA自动化 #元素定位 #网页自动化 #XPath
作者:林焱