文章
drissionpage定位元素
from DrissionPage import Chromium
tab = Chromium().latest_tab
tab.get("https://gitee.com/explore")
# 精确匹配
ele = tab.ele("@id=row1") # 获取id属性为row1的属性
# 模糊匹配
ele = tab.ele("@id:ow") # 获取id熟悉包含ow的元素
# 匹配开头
ele = tab.ele("@id^row") # 获取id属性以row开头的元素
# 匹配结尾
ele = tab.ele("@id$w1") # 获取id属性以w1结尾的元素
# id 匹配符 #
# class 匹配符 .
# 文本匹配符 text
ele = tab.ele("text=第一行")
ele = tab.ele("text:第一行")
ele = tab.ele("第一")
# 类型匹配符 tag 用于匹配某类型元素 单独使用时生效 相当于属性查找 @tag()=xxx
ele = tab.ele("tag:div") # 查找第一个div元素
ele = tab.ele("tag:p@class=p_cls") # 与单属性查找配合使用
ele = tab.ele("tag:p@@class=p_cls@@text()=第一行") # 与多属性配合使用
# tag:div@text():abc 和 tag:div@@text():abc 是有区别的,前者在div的直接文本节点搜索,后者搜索div的整个内部
# css 匹配符 css
# css: 和 css=效果一致 没有css^和css$语法
ele = tab.ele("css:.div") # 查找div元素
# xpath匹配符 xpath
ele = tab.ele("xpath://div/@class") # 使用xpath获取div元素的class属性
ul_ele = tab.ele("tag:li@@text():全部推荐项目").parent(1)
# 获取 ele 后面第1个兄弟元素
ele2 = ele.next()
# 获取 ele 后面第3个兄弟元素
ele2 = ele2.next(3)
# 获取 ele 后面第3个div兄弟元素
ele2 = ele2.next("tag:div", 3)
# 获取 ele 后面第一个文本节点的文本
txt = ele.next("xpath:text()", 1)
简化写法
# 查找tag为div的元素
ele = tab.ele('tag:div') # 原写法
ele = tab('t:div') # 简化写法
# 用xpath查找元素
ele = tab.ele('xpath://****') # 原写法
ele = tab('x://****') # 简化写法
# 查找text为'something'的元素
ele = tab.ele('text=something') # 原写法
ele = tab('tx=something') # 简化写法基本语法
| 写法 | 精确匹配 | 模糊匹配 | 匹配开头 | 匹配结尾 | 说明 |
|---|---|---|---|---|---|
@属性名 | @属性名= | @属性名: | @属性名^ | @属性名$ | 按某个属性查找 |
@!属性名 | @!属性名= | @!属性名: | @!属性名^ | @!属性名$ | 查找属性不符合指定条件的元素 |
text | text= | text:或不写 | text^ | text$ | 按某个文本查找 |
@text() | @text()= | @text(): | text()^ | text()$ | text与@或@@配合使用时改为text(),常用于多条件匹配 |
tag | tag=或tag: | 无 | 无 | 无 | 查找某个类型的元素 |
@tag() | @tag()=或@tag(): | 无 | 无 | 无 | 组合使用时查找某个类型的元素 |
xpath | xpath=或xpath: | 无 | 无 | 无 | 用 xpath 方式查找元素 |
css | css=或css: | 无 | 无 | 无 | 用 css selector 方式查找元素 |
组合用法
| 写法 | 说明 |
|---|---|
@@属性1@@属性2 | 匹配属性同时符合多个条件的元素 |
@@属性1@!属性2 | 多属性匹配与否定匹配同时使用 |
@|属性1@|属性2 | 匹配属性至符合多个条件中一的元素 |
tag:元素名@属性名 | tag与属性匹配共同使用 |
tag:元素名@@属性1@@属性2 | tag与多属性匹配共同使用 |
tag:元素名@|属性1@|属性2 | tag与多属性匹配共同使用 |
tag:元素名@@text()=文本@@属性 | tag与文本和属性匹配共同使用 |
简化写法
| 原写法 | 简化写法 | 精确匹配 | 模糊匹配 | 匹配开头 | 匹配结尾 | 备注 |
|---|---|---|---|---|---|---|
@id | # | #或#= | #: | #^ | #$ | 简化写法只能单独使用 |
@class | . | .或.= | .: | .^ | .$ | 简化写法只能单独使用 |
tag | t | t:或t= | 无 | 无 | 无 | 只能用在句首 |
@tag() | @t() | @t():或@t()= | 无 | 无 | 无 | 可作为属性组合使用 |
text | tx | tx= | tx:或不写 | tx^ | tx$ | 无标签时使用模糊匹配文本 |
@text() | @tx() | @tx()= | @tx(): | @tx()^ | @tx()$ | 可作为属性组合使用 |
xpath | x | x:或x= | 无 | 无 | 无 | 只能单独使用 |
css | c | c:或c= | 无 | 无 | 无 | 只能单独使用 |
相对定位
| 方法 | 说明 |
|---|---|
parent() | 查找当前元素某一级父元素 |
child() | 查找当前元素的一个直接子节点 |
children() | 查找当前元素全部符合条件的直接子节点 |
next() | 查找当前元素之后第一个符合条件的兄弟节点 |
nexts() | 查找当前元素之后所有符合条件的兄弟节点 |
prev() | 查找当前元素之前第一个符合条件的兄弟节点 |
prevs() | 查找当前元素之前所有符合条件的兄弟节点 |
after() | 查找文档中当前元素之后第一个符合条件的节点 |
afters() | 查找文档中当前元素之后所有符合条件的节点 |
before() | 查找文档中当前元素之前第一个符合条件的节点 |
befores() | 查找文档中当前元素之前所有符合条件的节点 |
iframe 和 shadow root
| 方法 | 简化写法 | 说明 | 备注 |
|---|---|---|---|
get_frame() | 无 | 在页面中查找一个<iframe>元素 | 只有页面对象有此方法 |
shadow_root | sr | 获取当前元素内的 shadow root 对象 | 只有元素对象有此属性 |