获取元素信息
本教程共 42 篇 · 第 23 篇 · 更新于 2026-07-29 · 约 5 分钟阅读
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() 接收属性名,返回属性值。src 和 href 会自动补全为完整路径。
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 — 获取链接地址
link 方法返回元素的 href 或 src 属性,没有则返回 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 # 返回第一级子元素个数