浏览器页面对象获取元素对象的方式,与`SessionPage`获取元素对象的方法是一致的,但比后者有更多功能。本节重点介绍其独有功能,与`SessionPage`一致的部分,请查看“收发数据包》查找元素”章节。 # ✔️ 查找元素方法 ## 📍 查找单个元素 🔸 `ele()` 页面对象和元素对象都拥有此方法,用于查找第一个匹配条件的元素。 页面对象和元素对象的`ele()`方法参数名称稍有不同,但用法一样。 查找元素内置了等待元素出现功能,默认跟随页面设置,也可以每次查找单独调整。 ?>**Tips:**
在元素对象的`ele()`方法中使用 xpath 可直接获取后代元素的属性。 | 参数名称 | 类型 | 默认值 | 说明 | |:------------------:|:-----------------------------------------------:|:------:| --------------------------------------------- | | `loc_or_str`(元素对象) | `str`
`Tuple[str, str]` | 必填 | 元素的定位信息,可以是查询字符串,或 loc 元组 | | `loc_or_ele`(页面对象) | `str`
`ChromiumElement`
`Tuple[str, str]` | 必填 | 元素的定位信息,可以是查询字符串、loc 元组或一个`ChromiumElement`对象 | | `timeout` | `int`
`float` | `None` | 查找元素等待时间,为`None`则使用页面对象`timeout`属性值 | | 返回类型 | 说明 | |:-----------------:| --------------------------------- | | `ChromiumElement` | 返回查找到的第一个符合条件的元素对象 | | `None` | 限时内未找到符合条件的元素时返回`None` | | `str` | 在元素的`ele()`中使用 xpath,可直接获取后代元素的属性 | **示例:** ```python from DrissionPage import ChromiumPage page = ChromiumPage() # 在页面内查找元素 ele1 = page.ele('#one') # 在元素内查找后代元素 ele2 = ele1.ele('第二行') # 使用 xpath 获取后代中第一个 div 元素的 class 属性(元素内查找可用) ele_class = ele1.ele('xpath://p/@class') ``` --- ## 📍 查找多个元素 🔸 `eles()` 此方法与`ele()`相似,但返回的是匹配到的所有元素组成的列表。 元素对象用 xpath 获取元素属性时,返回属性文本组成的列表。 | 参数名称 | 类型 | 默认值 | 说明 | |:------------:|:--------------------------:|:------:| ----------------------------------- | | `loc_or_str` | `str`
`Tuple[str, str]` | 必填 | 元素的定位信息,可以是查询字符串,或 loc 元组 | | `timeout` | `int`
`float` | `None` | 查找元素等待时间,为`None`则使用页面对象`timeout`属性值 | | 返回类型 | 说明 | |:-----------------------:| ---------------------------------- | | `List[ChromiumElement]` | 返回找到的所有`ChromiumElement`组成的列表 | | `List[str]` | 在元素的`eles()`中使用 xpath,可直接获取后代元素的属性 | **示例:** ```python # 获取ele元素内的所有p元素 p_eles = ele.eles('tag:p') # 打印第一个p元素的文本 print(p_eles[0].text) ``` --- ## 📍 查找单个静态元素 静态元素即 s 模式的`SessionElement` 元素对象,是纯文本构造的,因此用它处理速度非常快。对于复杂的页面,要在成百上千个元素中采集数据时,转换为静态元素可把速度提升几个数量级。作者曾在采集的时候,用同一套逻辑,仅仅把元素转换为静态,就把一个要 30 秒才采集完成的页面,加速到零点几秒完成。 我们甚至可以把整个页面转换为静态元素,再在其中提取信息。 当然,这种元素不能进行点击等交互。 用`s_ele()`可在把查找到的动态元素转换为静态元素输出,或者获取元素或页面本身的静态元素副本。 🔸 `s_ele()` 页面对象和元素对象都拥有此方法,用于查找第一个匹配条件的元素,获取其静态版本。 页面对象和元素对象的`s_ele()`方法参数名称稍有不同,但用法一样。 | 参数名称 | 类型 | 默认值 | 说明 | |:------------------:|:-----------------------------------------------:|:---:| --------------------------------------------- | | `loc_or_str`(元素对象) | `str`
`Tuple[str, str]` | 必填 | 元素的定位信息,可以是查询字符串,或 loc 元组 | | `loc_or_ele`(页面对象) | `str`
`ChromiumElement`
`Tuple[str, str]` | 必填 | 元素的定位信息,可以是查询字符串、loc 元组或一个`ChromiumElement`对象 | | 返回类型 | 说明 | |:----------------:| --------------------------------- | | `SessionElement` | 返回查找到的第一个符合条件的元素对象的静态版本 | | `None` | 限时内未找到符合条件的元素时返回`None` | | `str` | 在元素的`ele()`中使用 xpath,可直接获取后代元素的属性 | !>**注意:**
页面对象和元素对象的`s_ele()`方法不能搜索到在`