全栈开发

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')  # 简化写法

基本语法

写法精确匹配模糊匹配匹配开头匹配结尾说明
@属性名@属性名=@属性名:@属性名^@属性名$按某个属性查找
@!属性名@!属性名=@!属性名:@!属性名^@!属性名$查找属性不符合指定条件的元素
texttext=text:或不写text^text$按某个文本查找
@text()@text()=@text():text()^text()$text@@@配合使用时改为text(),常用于多条件匹配
tagtag=tag:查找某个类型的元素
@tag()@tag()=@tag():组合使用时查找某个类型的元素
xpathxpath=xpath:用 xpath 方式查找元素
csscss=css:用 css selector 方式查找元素

组合用法

写法说明
@@属性1@@属性2匹配属性同时符合多个条件的元素
@@属性1@!属性2多属性匹配与否定匹配同时使用
@|属性1@|属性2匹配属性至符合多个条件中一的元素
tag:元素名@属性名tag与属性匹配共同使用
tag:元素名@@属性1@@属性2tag与多属性匹配共同使用
tag:元素名@|属性1@|属性2tag与多属性匹配共同使用
tag:元素名@@text()=文本@@属性tag与文本和属性匹配共同使用

简化写法

原写法简化写法精确匹配模糊匹配匹配开头匹配结尾备注
@id###=#:#^#$简化写法只能单独使用
@class...=.:.^.$简化写法只能单独使用
tagtt:t=只能用在句首
@tag()@t()@t():@t()=可作为属性组合使用
texttxtx=tx:或不写tx^tx$无标签时使用模糊匹配文本
@text()@tx()@tx()=@tx():@tx()^@tx()$可作为属性组合使用
xpathxx:x=只能单独使用
csscc:c=只能单独使用

相对定位

方法说明
parent()查找当前元素某一级父元素
child()查找当前元素的一个直接子节点
children()查找当前元素全部符合条件的直接子节点
next()查找当前元素之后第一个符合条件的兄弟节点
nexts()查找当前元素之后所有符合条件的兄弟节点
prev()查找当前元素之前第一个符合条件的兄弟节点
prevs()查找当前元素之前所有符合条件的兄弟节点
after()查找文档中当前元素之后第一个符合条件的节点
afters()查找文档中当前元素之后所有符合条件的节点
before()查找文档中当前元素之前第一个符合条件的节点
befores()查找文档中当前元素之前所有符合条件的节点

iframe 和 shadow root

方法简化写法说明备注
get_frame()在页面中查找一个<iframe>元素只有页面对象有此方法
shadow_rootsr获取当前元素内的 shadow root 对象只有元素对象有此属性