首页 / DrissionPage 入门教程 / 获取元素信息

DrissionPage 入门教程

获取元素信息

本教程共 42 篇 · 第 23 篇 · 更新于 2026-07-29 · 约 5 分钟阅读

DrissionPageDrissionPage 入门教程元素信息textattrrect状态判断

23. 获取元素信息

本节目标:学会读取元素的各种属性信息,包括文本、标签、HTML、属性、位置坐标和状态,为数据提取和逻辑判断打下基础。

标签和 HTML 内容

tag — 获取标签名

tag 属性返回元素的标签名,返回字符串。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://www.baidu.com')

ele = tab.ele('#kw')
print(ele.tag)  # 输出:input

html — 获取 outerHTML

html 返回元素的 outerHTML,包含元素自身标签。

ele = tab.ele('#su')
print(ele.html)
# 输出:<input type="submit" id="su" value="百度一下" class="bg s_btn">

inner_html — 获取 innerHTML

inner_html 返回元素内部的 HTML,不包含元素自身标签。

ele = tab.ele('#s-top-left')
print(ele.inner_html)  # 输出内部所有链接的 HTML

文本内容

text — 获取格式化文本

text 返回元素内所有文本组合成的字符串。已格式化,去除了多余换行符,便于直接使用。

ele = tab.ele('#s-top-left')
print(ele.text)
# 输出:新闻\nhao123\n地图\n贴吧\n视频\n...

raw_text — 获取原始文本

raw_text 返回未经处理的原始文本,保留页面中的原始格式。

print(ele.raw_text)  # 原始未格式化的文本

texts() — 获取子节点文本列表

texts() 返回元素内所有直接子节点的文本。参数 text_node_only=True 时只返回不被包裹的文本节点。

# 获取所有子节点文本
texts = ele.texts()
print(texts)  # ['新闻', 'hao123', '地图', ...]

# 只获取裸露的文本节点
texts = ele.texts(text_node_only=True)

属性操作

attr() — 获取指定属性值

attr() 接收属性名,返回属性值。srchref 会自动补全为完整路径。

ele = tab.ele('#su')
print(ele.attr('value'))   # 输出:百度一下
print(ele.attr('type'))    # 输出:submit
print(ele.attr('id'))      # 输出:su

# 没有该属性返回 None
print(ele.attr('name'))    # 输出:None
Note

返回的 src/href 是已补全的完整路径。要获取原始路径,用 ele.attrs['src']

attrs — 获取所有属性

attrs 以字典形式返回元素所有属性及值。

ele = tab.ele('#su')
print(ele.attrs)
# 输出:{'type': 'submit', 'id': 'su', 'value': '百度一下', 'class': 'bg s_btn'}

property() — 获取 property 属性

property() 用于获取 DOM 对象的 property 属性值。

value = ele.property('value')

value — 获取 value 值

value 方法返回元素的 value 属性值。

ele = tab.ele('#kw')
ele.input('DrissionPage')
print(ele.value)  # 输出:DrissionPage

link 方法返回元素的 hrefsrc 属性,没有则返回 None

ele = tab.ele('t:a')
print(ele.link)  # 输出:https://www.baidu.com/...

大小和位置

rect.size — 元素尺寸

rect.size 以元组形式返回元素的宽高。

size = ele.rect.size
print(size)  # 输出:(50, 50)

rect.location — 页面坐标

rect.location 返回元素左上角在整个页面中的坐标。

loc = ele.rect.location
print(loc)  # 输出:(50, 50)

rect.midpoint — 中点坐标

rect.midpoint 返回元素中点在整个页面中的坐标。

mid = ele.rect.midpoint
print(mid)  # 输出:(75, 75)

rect.viewport_location — 视口坐标

rect.viewport_location 返回元素左上角在当前视口中的坐标。

loc = ele.rect.viewport_location

rect.viewport_midpoint — 视口中点

rect.viewport_midpoint 返回元素中点在当前视口中的坐标。

mid = ele.rect.viewport_midpoint

rect.corners — 四角坐标

rect.corners 返回元素四个角在页面中的坐标,顺序:左上、右上、右下、左下。

corners = ele.rect.corners

rect.scroll_position — 滚动条位置

rect.scroll_position 返回元素内滚动条位置,格式:(x, y)。

pos = ele.rect.scroll_position

状态信息

states.is_displayed — 是否可见

if ele.states.is_displayed:
    print('元素可见')

states.is_enabled — 是否可用

if ele.states.is_enabled:
    print('元素可用,可以交互')

states.is_in_viewport — 是否在视口内

if ele.states.is_in_viewport:
    print('元素在视口内')

states.is_whole_in_viewport — 整体在视口内

if ele.states.is_whole_in_viewport:
    print('元素完整显示在视口内')

states.is_checked — 是否选中

用于判断单选框或复选框是否被选中。

checkbox = tab.ele('#agree')
if checkbox.states.is_checked:
    print('已勾选')

states.is_covered — 是否被覆盖

返回覆盖元素的 id,未被覆盖返回 False

result = ele.states.is_covered
if result:
    print(f'被元素 {result} 覆盖')
else:
    print('未被覆盖')

states.is_clickable — 是否可点击

判断元素是否可被模拟点击,不判断是否被遮挡。

if ele.states.is_clickable:
    print('可以点击')

states.has_rect — 是否有大小和位置

if ele.states.has_rect:
    print('元素有大小和位置信息')

states.is_alive — 元素是否仍可用

用于判断 d 模式下元素是否因页面刷新而失效。

if ele.states.is_alive:
    print('元素仍然可用')

路径信息

xpath — 获取绝对 xpath

path = ele.xpath
print(path)  # 输出:/html/body/div[1]/div[1]/...

css_path — 获取绝对 css selector

path = ele.css_path
print(path)

元素列表批量获取信息

eles() 返回的元素列表自带 get 属性,可批量获取信息。

eles = tab.eles('t:a')

# 获取所有元素的文本
print(eles.get.texts())   # ['新闻', 'hao123', '地图', ...]

# 获取所有元素的链接
print(eles.get.links())   # ['http://...', 'http://...', ...]

# 获取所有元素的指定属性
print(eles.get.attrs('href'))  # 所有 href 属性值

批量获取信息比循环遍历每个元素效率高得多。处理列表时优先用

其他信息

comments — 获取注释

comments = ele.comments  # 返回元素内的 HTML 注释列表

style() — 获取 CSS 样式

# 获取普通元素的样式
color = ele.style('color')

# 获取伪元素样式
before_content = ele.style('content', pseudo_ele='::before')

pseudo.before / pseudo.after — 伪元素内容

before = ele.pseudo.before  # ::before 伪元素内容
after = ele.pseudo.after    # ::after 伪元素内容

shadow_root — 获取 Shadow Root

sr = ele.shadow_root  # 返回 ShadowRoot 对象,没有返回 None

child_count — 子元素个数

count = ele.child_count  # 返回第一级子元素个数