全部产品
  • 首页 > 
  • 如何使用参数parent_element

如何使用参数parent_element

参数parent_element的作用


小伙伴们在studio的左侧列表中看到有很多SDK是不是都有一个参数parent_element呀?大家是不是都很疑惑呢,这个参数到底有什么作用呢?它是如何使用的呢?那么这篇文章将会给大家解释parent_element的作用和用法。

parent_element是什么?

parent_element,中文名字为父控件。说到控件,控件就是使用录制工具录制的对象,sdk中参数为element。
总结:parent_element = 父控件 element = 控件

那么parent_element究竟是什么呢?
父控件的作用就是限定控件的寻找范围,当父控件参数赋值以后,寻找控件的范围再也不是在网页内部,而是在父控件内部。

举个栗子!!!假设有两个同学名字都叫小明,他们分别属于一班和二班。如果将学校比作一个网页(page对象),在整个学校内找名字为小明的同学会找到多个。但是如果我将他们的班级作为父控件,在以班内为限定范围内寻找,那么一班的小明就很快被找到了。
这样大家是不是理解了parent_element的作用了呢。

parent_element类型

在左侧的SDK栏中可以看到,parent_element的类型是控件对象,也就是。那么这个控件对象如何取得呢。其实是通过get_element获取控件对象的。

如下代码解释

  1. # 获取控件对象
  2. element_name = page.get_element("test")
  3. # 此步骤将控件对象赋值给参数parent_element,以此来限定控件test1的查找范围。
  4. page.click("test1", parent_element=element_name)

parent_element使用场景

小伙伴们肯定很疑惑了,既然parent_element可以限定控件的范围,那么都用在什么场景呢?

  1. 在开发过程中,我们会遇到很多情况是,控件录制了以后,回显发现有很多,但是我想要的就只有那一个。
  2. 相同的控件有很多,但是在某一个标签内部,这个控件只有一个,想要动态的获取每一个控件。
  3. 录制一个控件,在网页内部有很多,想要试用的控件次序不确定。

parent_element如何使用?

基于以上场景,我们给出了parent_element的功能。
前文大家已经知道了,parent_element的参数类型是控件对象。获取这个控件对象的方法是使用get_element.

下面我将介绍如何使用parent_element。

特别说明

条条大路通罗马,本案例实现的方式有很多。本文只是介绍使用parent_element方法实现的场景,不代表其他实现方式存在问题。

案例场景介绍

此案例的场景如下:创建淘宝网页,搜索任意一个物品,将搜索到的宝贝信息的宝贝名称、金额、店铺名称的信息输出。

案例实现

  1. 创建淘宝网页
  1. page = rpa.chrome.create("www.taobao.com")
  1. 录制输入框和搜索框进行查找宝贝信息
  1. page.input('输入', '青苹果', index = 1, simulate = True, replace = True, sentRaw = False)
  2. page.click('搜索', index = 1, simulate = True, button = 'left')
  1. 此时已经搜索出想要的宝贝信息。此案例以‘青苹果’为例,但是在录制的时候也考虑其他搜索同样适用。

  2. 下图视频录制宝贝名称、宝贝价格、店铺名称三个控件,其中包括修改控件属性。

录制控件.wmv (46.58MB)

  1. 录制父控件

父控件.wmv (13.64MB)

  1. 此时录制完成需要获取信息的控件。如下代码,可发现,在父控件范围下,每个控件个数只有一个。
  1. page = rpa.chrome.catch('淘宝搜索', mode='title', pattern='contain')
  2. # 获取控件对象,作为父控件。此时index=1说明是第一个控件作为父控件,如果想要每一个控件作为父控件,可增加循环
  3. father_element = page.get_element("父控件", index=1)
  4. 宝贝名称 = page.element_count("宝贝名称", parent_element=father_element)
  5. 店铺名称 = page.element_count("店铺名称", parent_element=father_element)
  6. 宝贝价格 = page.element_count("宝贝价格", parent_element=father_element)
  7. print(宝贝名称, 店铺名称, 宝贝价格)
  1. 增加循环,可以获取该页面每个宝贝的信息,此时循环次数可以在页面获取。有一个sdk是获取控件个数——element_count.
  1. page = rpa.chrome.catch('淘宝搜索', mode='title', pattern='contain')
  2. 控件个数 = page.element_count("父控件")
  3. print(控件个数)
  4. for i in range(1, 控件个数+1):
  5. print(i)
  6. father_element = page.get_element("父控件", index=i)
  7. f宝贝名称 = page.element_count("宝贝名称", parent_element=father_element)
  8. f店铺名称 = page.element_count("店铺名称", parent_element=father_element)
  9. f宝贝价格 = page.element_count("宝贝价格", parent_element=father_element)
  10. print(f宝贝名称, f店铺名称, f宝贝价格)
  11. # 获取宝贝信息
  12. 宝贝名称 = page.text(element="宝贝名称", parent_element=father_element)
  13. 店铺名称 = page.text(element="店铺名称", parent_element=father_element)
  14. 宝贝价格 = page.text(element="宝贝价格", parent_element=father_element)
  15. print(宝贝名称, 店铺名称, 宝贝价格)

案例代码示例

  1. from rpa.core import *
  2. from rpa.utils import *
  3. import rpa3 as rpa # 使用V3引擎
  4. def start():
  5. page = rpa.chrome.create("www.taobao.com")
  6. page = rpa.chrome.catch('https://www.taobao.com/', mode='url', pattern='equal')
  7. page.input('输入', '苹果', index = 1, simulate = True, replace = True, sentRaw = False)
  8. page.click('搜索', index = 1, simulate = True, button = 'left')
  9. page = rpa.chrome.catch('淘宝搜索', mode='title', pattern='contain')
  10. 控件个数 = page.element_count("父控件")
  11. print(控件个数)
  12. for i in range(1, 控件个数+1):
  13. print(i)
  14. father_element = page.get_element("父控件", index=i)
  15. f宝贝名称 = page.element_count("宝贝名称", parent_element=father_element)
  16. f店铺名称 = page.element_count("店铺名称", parent_element=father_element)
  17. f宝贝价格 = page.element_count("宝贝价格", parent_element=father_element)
  18. print(f宝贝名称, f店铺名称, f宝贝价格)
  19. # 获取宝贝信息
  20. 宝贝名称 = page.text(element="宝贝名称", parent_element=father_element)
  21. 店铺名称 = page.text(element="店铺名称", parent_element=father_element)
  22. 宝贝价格 = page.text(element="宝贝价格", parent_element=father_element)
  23. print(宝贝名称, 店铺名称, 宝贝价格)

控件文件
父控件案例.7z