首页 / DrissionPage 入门教程 / 相对定位

DrissionPage 入门教程

相对定位

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

DrissionPageDrissionPage 入门教程相对定位parentnext兄弟元素

18. 相对定位

本节目标:掌握以某个元素为基准,获取它的父元素、子元素、兄弟元素等方法,学完能用相对定位处理复杂的 DOM 关系。

什么是相对定位

相对定位就是:你已经找到了一个元素,然后以它为基准,去找它周围的元素。

比如找到了一个输入框,想找它旁边的按钮。或者找到了一个单元格,想找同一行的其他单元格。

DrissionPage 提供两种相对定位:基于 DOM 的和基于视觉的。

基于 DOM 的相对定位

DOM 相对定位按照 HTML 结构关系查找,获取父节点、子节点、同级节点。

获取父级元素 parent()

# 获取上一级父元素
parent = ele.parent()

# 获取第二层父元素
grandparent = ele.parent(2)

# 获取父元素中 id 为 container 的元素
container = ele.parent('#container')

parent() 可以传数字(第几级父元素)或定位符(在祖先中筛选)。

获取直接子节点 child()children()

# 获取第一个直接子节点
child = ele.child()

# 获取第三个直接子节点
child = ele.child(3)

# 获取第一个 div 子节点
child = ele.child('t:div')

# 获取所有直接子节点
children = ele.children()

# 获取所有 div 子节点
divs = ele.children('t:div')
Note

默认只查找元素节点。设置 ele_only=False 可以包含文本节点和注释节点。

获取后面的兄弟元素 next()nexts()

# 获取后面第一个兄弟元素
bro = ele.next()

# 获取后面第三个兄弟元素
bro = ele.next(3)

# 获取后面第三个 div 兄弟元素
bro = ele.next('t:div', 3)

# 获取后面所有兄弟元素
bros = ele.nexts()

# 获取后面所有 div 兄弟元素
div_bros = ele.nexts('t:div')

获取前面的兄弟元素 prev()prevs()

# 获取前面第一个兄弟元素
prev = ele.prev()

# 获取前面第二个兄弟元素
prev = ele.prev(2)

# 获取前面所有兄弟元素
all_prev = ele.prevs()

文档范围查找 after()before()

next()prev() 只在同级节点中查找。after()before() 的范围是整个文档。

# 获取当前元素后面第 3 个元素(不限同级)
ele2 = ele.after(index=3)

# 获取当前元素后面第 3 个 div
ele2 = ele.after('t:div', 3)

# 获取当前元素前面第 2 个元素
ele2 = ele.before(2)

# 获取后面所有元素
all_after = ele.afters()

# 获取前面所有 div
all_divs_before = ele.befores('t:div')

基于视觉的相对定位

DOM 相对定位按照 HTML 结构来,视觉相对定位按照页面上的位置来。

只有浏览器模式(d 模式)支持,s 模式不行。

四个方向

# 获取右边的元素
right = ele.east()

# 获取左边的元素
left = ele.west()

# 获取下边的元素
below = ele.south()

# 获取上边的元素
above = ele.north()

可以传入定位符筛选,也可以传入像素距离。

# 获取右边第一个 button
btn = ele.east('t:button')

# 获取右边 100 像素位置的元素
ele2 = ele.east(100)

偏移量定位

# 获取相对于元素左上角偏移 (50, 100) 位置的元素
ele2 = ele.offset(50, 100)

获取覆盖元素

# 获取覆盖在当前元素最上层的元素
cover = ele.over()

视觉相对定位只能获取可见元素,被遮挡的获取不到。

实际例子

假设页面上有个表格,每行有一个复选框和多个数据列。你想点击某行的复选框:

# 先找到包含"张三"的单元格
cell = ele.ele('text:张三')

# 找到同一行的复选框(前面第二个兄弟)
checkbox = cell.prev(2)

# 点击复选框
checkbox.click()

或者用 parent() 先找到行,再找行内的复选框:

# 找到包含"张三"的单元格
cell = ele.ele('text:张三')

# 找到所在的行
row = ele.parent('t:tr')

# 在行内找复选框
checkbox = row.ele('t:input')
checkbox.click()

方法速查

方法作用范围
parent()获取父元素DOM
child()获取直接子节点DOM
children()获取所有直接子节点DOM
next()获取后面兄弟元素DOM 同级
nexts()获取后面所有兄弟元素DOM 同级
prev()获取前面兄弟元素DOM 同级
prevs()获取前面所有兄弟元素DOM 同级
after()获取后面元素DOM 全文
before()获取前面元素DOM 全文
east()获取右边元素视觉
west()获取左边元素视觉
south()获取下边元素视觉
north()获取上边元素视觉
offset()偏移量定位视觉
over()获取覆盖元素视觉

小结

  • DOM 相对定位按照 HTML 结构关系查找
  • 视觉相对定位按照页面上的位置查找
  • parent()child()next()prev() 是最常用的四个
  • after()before() 范围是整个文档,不限于同级
  • 视觉定位只有浏览器模式支持