DrissionPage/docs/4_SessionPge/5_get_element_info.md
2023-02-03 00:03:36 +08:00

307 lines
4.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

`SessionPage`对象和`WebPage` 对象s 模式获取的元素是`SessionElement`,本节介绍其属性。
假设`ele`为以下`div`元素的对象,本节示例均使用该元素:
```html
<div id="div1" class="divs">Hello World!
<p>行元素</p>
<!--这是注释-->
</div>
```
# ✔️ `html`
此属性返回元素的`outerHTML`文本。
**返回类型:**`str`
```python
print(ele.html)
```
**输出:**
```console
<div id="div1" class="divs">Hello World!
<p>行元素</p>
<!--这是注释-->
</div>
```
---
# ✔️ `inner_html`
此属性返回元素的`innerHTML`文本。
**返回类型:**`str`
```python
print(ele.inner_html)
```
**输出:**
```console
Hello World!
<p>行元素</p>
<!--这是注释-->
```
---
# ✔️ `tag`
此属性返回元素的标签名。
**返回类型:**`str`
```python
print(ele.tag)
```
**输出:**
```console
div
```
---
# ✔️ `text`
此属性返回元素内所有文本组合成的字符串。
该字符串已格式化,即已转码,已去除多余换行符,符合人读取习惯,便于直接使用。
**返回类型:**`str`
```python
print(ele.text)
```
**输出:**
```console
Hello World!
行元素
```
---
# ✔️ `raw_text`
此属性返回元素内原始文本。
**返回类型:**`str`
```python
print(ele.raw_text)
```
输出(注意保留了元素间的空格和换行):
```console
Hello World!
行元素
 
 
```
---
# ✔️ `texts()`
此方法返回元素内所有**直接**子节点的文本,包括元素和文本节点。 它有一个参数`text_node_only`,为`True`时则只获取只返回不被包裹的文本节点。这个方法适用于获取文本节点和元素节点混排的情况。
| 参数名称 | 类型 | 默认值 | 说明 |
|:----------------:|:------:|:-------:| --------- |
| `text_node_only` | `bool` | `False` | 是否只返回文本节点 |
| 返回类型 | 说明 |
|:-----------:| ---- |
| `List[str]` | 文本列表 |
**示例:**
```python
print(e.tests())
print(e.texts(text_node_only=True))
```
**输出:**
```console
['Hello World!', '行元素']
['Hello World!']
```
---
# ✔️ `comments`
此属性以列表形式返回元素内的注释。
**返回类型:**`List[str]`
```python
print(ele.comments)
```
**输出:**
```console
[<!--这是注释-->]
```
---
# ✔️ `attrs`
此属性以字典形式返回元素所有属性及值。
**返回类型:**`dict`
```python
print(ele.attrs)
```
**输出:**
```console
{'id': 'div1', 'class': 'divs'}
```
---
# ✔️ `attr()`
此方法返回元素某个`attribute`属性值。它接收一个字符串参数`attr`,返回该属性值文本,无该属性时返回`None`
此属性返回的`src``href`属性为已补充完整的路径。`text`属性为已格式化文本。
**返回类型:**`str``None`
| 参数名称 | 类型 | 默认值 | 说明 |
|:------:|:-----:|:---:| ---- |
| `attr` | `str` | 必填 | 属性名称 |
| 返回类型 | 说明 |
|:------:| ------------- |
| `str` | 属性值文本 |
| `None` | 没有该属性返回`None` |
**示例:**
```python
print(ele.attr('id'))
```
**输出:**
```console
div1
```
---
# ✔️ `link`
此方法返回元素的 href 属性或 src 属性,没有这两个属性则返回`None`
**返回类型:**`str`
```html
<a href='http://www.baidu.com'>百度</a>
```
假设`a_ele`为以上元素的对象:
```python
print(a_ele.link)
```
**输出:**
```console
http://www.baidu.com
```
---
# ✔️ `page`
此属性返回元素所在的页面对象。由 html 文本直接生成的`SessionElement``page`属性为`None`
**返回类型:**`SessionPage``WebPage`
```python
page = ele.page
```
---
# ✔️ `xpath`
此属性返回当前元素在页面中 xpath 的绝对路径。
**返回类型:**`str`
```python
print(ele.xpath)
```
**输出:**
```console
/html/body/div
```
---
# ✔️ `css_path`
此属性返回当前元素在页面中 css selector 的绝对路径。
**返回类型:**`str`
```python
print(ele.css_path)
```
**输出:**
```console
:nth-child(1)>:nth-child(1)>:nth-child(1)
```
---
# ✔️ 实际示例
以下示例可直接运行查看结果:
```python
from DrissionPage import SessionPage
page = SessionPage('s')
page.get('https://gitee.com/explore')
# 获取推荐目录下所有 a 元素
li_eles = page('tag:ul@@text():全部推荐项目').eles('t:a')
# 遍历列表
for i in li_eles:
# 获取并打印标签名、文本、href 属性
print(i.tag, i.text, i.attr('href'))
```
**输出:**
```console
a 全部推荐项目 https://gitee.com/explore/all
a 前沿技术 https://gitee.com/explore/new-tech
a 智能硬件 https://gitee.com/explore/hardware
a IOT/物联网/边缘计算 https://gitee.com/explore/iot
a 车载应用 https://gitee.com/explore/vehicle
以下省略……
```