浏览器页面对象获取元素对象的方式,与`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()`方法不能搜索到在`