
影刀RPA进阶教程元素属性动态变化的通配策略——正则与contains组合做电商采集最绝望的瞬间是流程昨天还跑得好好的今天一运行满屏元素定位失败。打开F12一看页面结构没变变的是属性——class后面多了个随机后缀某个状态值从active换成了checked元素还是那个元素属性已经不是那批属性了。我维护的抖音和淘宝采集流程平均每两周就会遇到一次属性动态变化。后来我在影刀RPA的元素编辑里把正则表达式和通配符用熟了这个问题就从灾难变成了五分钟的例行维护。官方文档里专门有一篇讲正则表达式和全局变量在元素编辑中的应用这篇教程我结合自己两个月的实战把通配策略讲透。核心思路一句话属性会变的部分不写死用正则圈定范围用contains抓稳定片段。动手前确认环境影刀RPA客户端更新到最新版通配符和正则匹配在旧版本上有过行为不一致的记录插件状态正常后先在元素编辑界面点校验按钮确认你的影刀RPA能吃下正则语法再大规模改造元素。元素定位四合一的进阶视角属性匹配的三档武器先复习定位四件套的关系。捕获元素、CSS选择器、XPath选择器解决怎么找到元素而当元素属性动态变化时真正起作用的是属性匹配的三档武器武器灵活度适用场景精确匹配零属性完全固定contains/通配符中局部固定局部变正则表达式高规律复杂或多状态影刀RPA的元素编辑中所有属性都支持通配符和正则表达式这一点是官方文档白纸黑字写的也是这篇所有玩法的地基。属性匹配方式在下拉里切换纯文本、通配符、正则。状态切换陷阱用一个正则排除法锁定元素先看官方文档里的原始案例这个例子我原样复刻过。页面上有个复选框勾选时属性是CBX_active_18l33c8不勾选时是CBX_18l33c8怎么让一个元素同时匹配勾选和不勾选两种状态笨办法是捕获两个元素分别处理页面一多就崩。正则解法一行搞定# 匹配所有不包含 active 的字符串元素编辑属性框里直接填 ^((?!active).)*$ # 同时排除多个关键字的写法排除disabled、prev、diff三个  ^((?!disabled|prev|diff).)*$^((?!active).)*$读法是从头到尾任何一个位置都不出现active竖线隔开就能一次排除一堆关键字。我把这条正则设为该属性的匹配条件后复选框不管勾没勾选都能稳定校验到状态判断改用【获取元素属性】指令读取属性值再用If判断文本里是否包含active——定位归定位判断归判断两条线分开走稳定性翻倍。这个排除法正则我后来用到了十几个场景排除广告位的-sponsored后缀、排除禁用按钮的disabled、排除隐藏元素的hidden全是同一套模板换关键字。contains组合拳XPath里的稳定片段抓取XPath这边的对应武器是contains和starts-with。动态class通常长这样btn-3f8a2-primary中间的哈希每次刷新都变但前缀btn-和后缀primary是稳的。# 捕获元素class前缀稳定、后缀随机的提交按钮 //button[starts-with(class,btn-) and contains(class,primary)] # 捕获元素class含多个动态片段只锚定最稳定的那个词 //div[contains(class,goods-card) and contains(class,selected)] # 捕获元素id带随机后缀的列表容器 //*[starts-with(id,itemList_)] # 组合文本定位属性会变但文本不变时锚定文本 //a[contains(class,btn) and contains(text(),立即抢购)]选型经验属性里只要存在一个永远不变的词就用contains锚那个词只有前缀或后缀稳定用starts-with或ends-with思路两个都变但整体规律可循才上正则。能用contains解决的不用正则正则调试成本更高。XPath里其实也有排除思路not加contains组合//div[not(contains(class,disabled))]选中所有不带disabled的元素翻页判断时这是主力写法。全局变量与fx把变量嵌进元素属性官方文档给的第二个玩法是全局变量做元素属性。新建全局变量后编辑元素时点属性值后面的fx图标选择全局变量这个属性的值就变成了变量当前的内容。两个典型用法我都跑在生产流程里用法一变量存固定值一套元素多点复用。建一个全局变量按钮名称元素的文本属性绑它流程里先设变量为新闻再点击再设为学术再点击一个元素定义顶两个用。校验时记得先给变量设默认值或者暂时改回纯文本否则校验阶段匹配不到。用法二变量存正则一元素匹配多状态。把全局变量的值设成(直|新)元素属性绑定这个变量后匹配方式选正则这个元素就同时匹配直播和新闻两类链接。官方文档的示例就是用这个变量配合相似元素循环把页面上两类链接一次性全抓下来逐个点击。变量内容匹配方式效果新闻纯文本只匹配新闻(直|新)正则匹配直播和新闻^((?!active).)*$正则排除含active的属性流程控制与翻页动态属性的经典战场不确定总页数的翻页是通配策略的第一实战场景。官方文档给过明确思路下一页按钮可点击时class不含disabled处于最后一页时class包含disabled。写成XPath就是# 捕获元素可点击状态的下一页按钮 //a[text()下一页 and not(contains(class,disabled))] # 捕获元素带disabled的下一页用于判断终止 //a[text()下一页 and contains(class,disabled)]流程结构用【While条件循环】循环条件是按钮元素存在且不含disabled循环体内抓数据加点击翻页。判断元素是否存在用【判断元素是否存在(web)】指令返回True或False直接喂给While。另一种页码式翻页用【For次数循环】先抓共100页的文本用【从文本中提取内容】的正则\d提出数字循环次数设成这个数。提取和循环的组合在这里又用上了。网页自动化属性变化叠加等待的正确姿势属性动态变化的页面往往加载也乱通配策略要和等待策略配套用。我的标准搭配是翻页或操作后先【等待元素(web)】等新版块容器出现容器出现后再做属性判断。等待的锚点元素本身也要用contains写法不然等待环节就先失败了。弹窗是另一个变量来源。有的弹窗出现后会给body加一个class导致原有元素校验不过。处理顺序沿用官方那套回车、Esc、刷新、点空白、Tab加回车测出有效的那招放在流程开头先执行。变量类型与数据处理抓回来的数据怎么接通配策略抓到的数据流进变量后该清洗清洗该落表落表。我的顺序是【写入行数据到表格】前先用【文本替换】清一遍杂字符价格里的逗号、标题里的换行都在这一步处理。批量抓取用【批量数据抓取(web)】指令配合extract_table逻辑返回二维表格后直接【写入区域数据到表格】一次性落表比逐行写快一个量级。鼠标键盘图像与进阶技能兜底与绕行属性变得连正则都追不上时某些网站每次构建class全变及时止损换路线图像识别点击兜底【HTTP请求】指令直接调接口绕开页面。接口返回JSON用【JSON解析】指令拆字段比任何属性匹配都稳定。抖音类站点class哈希每天换我最终方案就是接口加JSON通配策略做二线备用。OCR也是兜底选项【截图】加OCR文字识别拿到文本再正则提取图片渲染的价格就靠这条路抓。平台实战抖音商品页的通配改造实录拿我真实改过的抖音商品采集流程举例。原版元素锚定class“goods-title-xxxx”xxxx是构建哈希三天两头失效。改造三步元素class匹配改成contains锚goods-title哈希部分不再参与匹配加一层正则排除^((?!hidden).)*$把隐藏状态的元素排除掉列表容器用starts-with锚id前缀子元素相对容器定位减少独立锚点数量改造后连续跑了六周只维护过一次网站改版换了前缀词。通配策略不是一劳永逸但它把每天修变成了偶尔修这就是它最大的价值。系统联动与工程化规范策略的长期维护通配策略的元素定义要在工程层面管理命名规范平台_页面_元素每个动态属性旁边加批注写明正则的含义和上次失效日期。失效的元素我用飞书机器人通知自己——【发送飞书消息】在流程异常时推消息附上失败子流程名我在手机上就知道哪里要修。定时任务跑的流程建议把元素校验做成子流程自检开工前先跑一遍核心元素的存在性检查全过再正式采集不过就发通知终止避免跑一半留一堆脏数据。易错速查表现象原因解法正则排除法不生效匹配方式没切成正则属性匹配方式下拉选正则变量绑属性后校验失败变量没有默认值先设默认值或暂改纯文本contains锚的词也失效网站换了命名前缀批注里记录并更新锚词not contains误杀目标class里有同名字段换更长的特征词通配后匹配到多个元素范围放太宽叠加父容器限定再筛延伸阅读抖音商品页通配改造前后的完整对比源码还有我整理的12条常用属性正则清单放在代码仓库 home.linyan.cloud可以直接参考改造。官方文档正则表达式和全局变量在元素编辑中的应用是本篇的方法论源头配合食用效果最好。属性会变不可怕可怕的是每次都重捕获重调试。把正则、contains、全局变量这三样练成肌肉记忆你写的流程就从娇气变成皮实这中间的差距就是新手和老手之间真正的分水岭。#影刀RPA #RPA自动化 #元素定位 #正则表达式 #抖音采集作者林焱