# 影刀RPA实操指南:父子元素定位与相

影刀RPA实操指南:父子元素定位与相似元素列表的完整操作流程

采集商品列表页时,一页有30个商品。
问题:如果逐个捕获每个商品的标题、价格,要捕获90个元素,累死。
答案:用“父子元素定位”+“相似元素列表”——先定位父容器,再批量提取子元素数据。


一、核心概念

父元素:商品卡片的根容器(包裹整个商品信息)。

picture.image 子元素:父元素内部的标题、价格、链接等。
相似元素列表:页面上所有同类父元素的集合(如30个商品卡片)。

picture.image

影刀专属指令

  • 获取相似元素列表 → 拿到所有父元素
  • 循环相似元素列表 → 遍历每个父元素
  • 在循环内用相对定位提取子元素

picture.image

二、完整操作流程(5步法)

步骤1:捕获父元素(商品卡片容器)

打开目标网页,F12查看商品列表的HTML结构。
找到包裹单个商品的最外层标签(通常是 divli,有唯一class)。

示例(淘宝搜索页):

<div class="Item--root">

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/238a0c3cf9c44fd7be1dd88515fb4278~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781145365&x-signature=xKD6K8PcarBZT1RphUo6Y9MRlDs%3D)
  <div class="title">商品标题</div>
  <div class="price">¥99</div>
  <a href="/detail/123">详情</a>
</div>

picture.image

picture.image 捕获这个 div.Item--root 作为父元素,命名 product_card


步骤2:捕获子元素(以父元素为参照)

关键操作:捕获子元素时,不要直接捕获页面上的元素,而是在已经捕获的父元素基础上,用相对路径定位子元素

操作方法

  1. 在左侧元素库里,右键 product_card → 选择“捕获子元素”。
  2. 浏览器会打开,鼠标点击父元素内部的标题文字。
  3. 影刀自动生成相对路径(不会包含整个页面的绝对路径)。
# 自动生成的相对路径示例
# 父元素:product_card
# 子元素路径:.//div[@class='title']

# 开头的点 . 表示“从当前父元素开始”

如果手动编辑

  • 在子元素的XPath前加上 {父元素变量}//./
  • 例如:{product_card}//div[@class='title']

步骤3:获取相似元素列表

获取相似元素列表 指令,把页面上所有商品卡片一次性拿下来。

操作

  1. 拖入 获取相似元素列表 指令。

picture.image 2. 目标元素选 product_card(刚捕获的父元素)。

  1. 输出到变量,命名 product_list(类型:列表)。

picture.image 参数设置

  • 匹配模式:默认“所有相似元素”
  • 最大匹配数量:如果页面有分页加载,建议设50~100,不要设太大(会卡)

picture.image

picture.image

步骤4:循环相似元素列表

拖入 循环相似元素列表 指令,数据源选 {product_list}
循环体内,用相对定位提取每个卡片的子元素数据。

# 循环相似元素列表配置
# 列表:{product_list}
# 当前元素变量名:current_card(系统自动生成,可改名)

# 循环体内部:
# 1. 获取元素文本(标题)
#    元素路径:{current_card}//div[@class='title']
#    输出到:{title}

# 2. 获取元素文本(价格)
#    元素路径:{current_card}//div[@class='price']
#    输出到:{price}

# 3. 获取元素属性(链接)
#    指令:获取元素属性
#    元素路径:{current_card}//a
#    属性名:href
#    输出到:{link}

# 4. 将 {title}、{price}、{link} 组成一行数据,写入Excel追加行

关键:所有子元素定位必须使用 {current_card} 作为起点,不要用绝对路径。


步骤5:翻页后重复

翻到下一页后,再次执行 获取相似元素列表(会重新获取新页面的元素),然后循环。


三、相对定位的三种写法

在循环体内,定位子元素有三种写法,都能用:

写法示例说明
用变量拼接{current_card}//div[@class='title']最直观,推荐
XPath格式.//div[@class='title']点表示“当前节点”
影刀相对路径在元素库里捕获时选“相对路径”模式系统自动处理

实操建议
提前把标题、价格等子元素用“捕获子元素”方式存好(相对路径)。
循环内直接用这些子元素指令,把目标元素里的 {当前卡片} 手动改成变量名。


四、完整代码示例

# 采集淘宝商品列表(一页)

# 1. 打开网页(淘宝搜索页)

# 2. 获取相似元素列表
#    目标元素:product_card(已捕获的商品卡片父元素)
#    输出列表:product_list

# 3. 循环相似元素列表
#    列表:{product_list}
#    当前元素:card

#    3.1 获取元素文本(标题)
#        元素:card_title(已捕获的相对路径元素,内部是 ./div[@class='title'])
#        注意:需要在指令详情里把“目标元素”的动态变量设为 {card}
#        或者手动写元素路径:{card}//div[@class='title']
#        输出到:title

#    3.2 获取元素文本(价格)
#        元素路径:{card}//div[@class='price']
#        输出到:price

#    3.3 获取元素属性(链接)
#        元素:{card}//a
#        属性名:href
#        输出到:link

#    3.4 追加行到Excel
#        内容:[{title}, {price}, {link}]

# 4. 循环结束

# 5. 翻页后重复步骤2-4

五、3个关键易错点

易错1:子元素捕获时用了绝对路径

错误:捕获子元素时,直接点击页面上的标题,生成了 //div[@class='title'](从根节点开始)。
在循环内用这个元素,它会找到页面上第一个标题,而不是当前卡片的标题。

解决:必须用相对路径。重新捕获:右键父元素 → “捕获子元素”,或手动在路径前加 {current_card}//

易错2:获取相似元素列表后,页面滚动了

问题:先获取列表,然后滚动页面到底部加载更多,原来的列表变量不会自动更新。

解决:滚动后需要重新执行 获取相似元素列表

易错3:循环内频繁操作Excel导致速度慢

问题:一页30个商品,每个都写入Excel,循环30次写操作。

解决:把一页的数据先存到一个临时列表 {page_data},翻页前一次性写入。

# 优化写法
# 在循环相似元素列表内,不直接写入Excel
# 而是把每行数据追加到临时列表 {page_rows}
# 循环结束后,用“列表循环”一次性写入Excel

六、影刀专属操作清单

操作精确指令关键设置
捕获父元素捕获元素按钮 → 选中容器命名如 product_card
捕获子元素右键父元素 → 捕获子元素自动生成相对路径
获取相似元素列表获取相似元素列表目标元素选父元素
循环相似元素列表循环相似元素列表列表变量、当前元素变量
相对定位写法在元素路径中写 {当前变量}//子路径注意双斜杠
获取元素属性获取元素属性属性名如 href、src

版本差异:社区版 获取相似元素列表 在元素数量超过100时可能超时,建议分页处理。
创业版支持异步获取,速度更快。


常见问题速查

问题原因解决方法
循环内获取子元素总是取到第一个子元素是绝对路径改成 {current_card}//子路径
获取相似元素列表只拿到几个页面未滚动,只加载了可见部分先滚动到底部再获取
子元素捕获时“捕获子元素”灰色不可点没有选中父元素先在元素库选中父元素
循环时报“无效的当前元素”列表变量为空获取列表后用“输出日志”检查长度
相对路径写 ./ 无效影刀版本差异改用 {变量}// 写法

推荐资源

  • 影刀官方帮助中心:《相似元素列表——批量采集的核心》
  • 影刀学院视频:《父子元素定位与列表采集实战》(约18分钟)
  • 模板搜索:下载“电商商品列表采集”模板,看它的父子元素结构

最后一句:父子元素+相似元素列表,是批量采集的黄金组合。
记住三步:先捕获父容器 → 获取相似元素列表 → 循环内用 {当前卡片} 相对定位。
练熟这个,一页100个商品也能轻松拿下。


作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论