🔦 基本用法
✅️️ 查找元素方法
📌 ele()
页面对象和元素对象都拥有此方法,用于查找其内部的一个条件匹配的元素。
页面对象和元素对象的ele()
方法参数名称稍有不同,但用法一样。
SessionPage
和ChromiumPage
获取元素的方法是一致的,但前者返回的元素对象为SessionElement
,后者是ChromiumElement
。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
locator (元素对象) | str Tuple[str, str] | 必填 | 元素的定位信息。可以是查询字符串,或 loc 元组 |
locator (页面对象) | str SessionElement Tuple[str, str] | 必填 | 元素的定位信息。可以是查询字符串、loc 元组或一个SessionElement 对象 |
index | int | 1 | 获取第几个匹配的元素,从1 开始,可输入负数表示从后面开始数 |
timeout | float | None | 等待元素出现的超时时间,为None 使用页面对象设置,SessionPage 中无效 |
返回类型 | 说明 |
---|---|
SessionElement | SessionPage 或SessionElement 查找到的第一个符合条件的元素对象 |
ChromiumElement | 浏览器页面对象或元素对象查找到的第一个符合条件的元素对象 |
ChromiumFrame | 当结果是框架元素时,会返回ChromiumFrame ,但 IDE 中不会包含该提示 |
NoneElement | 未找到符合条件的元素时返回 |
说明
- loc 元组是指 selenium 定位符,例:(By.ID, '****')。下同。
ele('****', index=2)
和eles('****')[1]
结果一样,不过前者会快很多。
示例:
from DrissionPage import SessionPage
page = SessionPage()
# 在页面内查找元素
ele1 = page.ele('#one')
# 在元素内查找后代元素
ele2 = ele1.ele('第二行')
📌 eles()
此方法与ele()
相似,但返回的是匹配到的所有元素组成的列表。
页面对象和元素对象都可调用这个方法。
eles()
返回的是普通列表,链式操作需加下标,如page.eles('...')[0].ele('...')
。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
locator | str Tuple[str, str] | 必填 | 元素的定位信息,可以是查询字符串,或 loc 元组 |
timeout | float | None | 等待元素出现的超时时间,为None 使用页面对象设置,SessionPage 中无效 |
返回类型 | 说明 |
---|---|
List[SessionElement] | SessionPage 或SessionElement 找到的所有元素组成的列表 |
ElementsList[ChromiumElement, ChromiumFrame] | 浏览器页面对象或元素对象找到的所有元素组成的列表,此列表可进一步筛选元素 |
示例:
# 获取页面内的所有p元素
p_eles = page.eles('tag:p')
# 获取ele1元素内的所有p元素
p_eles = ele1.eles('tag:p')
# 打印第一个p元素的 文本
print(p_eles[0])
✅️️ 匹配模式
匹配模式指某个查询中匹配条件的方式,有精确匹配、模糊匹配、匹配开头、匹配结尾四种。
📌 精确匹配 =
表示精确匹配,匹配完全符合的文本或属性。
# 获取name属性为'row1'的元素
ele = page.ele('@name=row1')
📌 模糊匹配 :
表示模糊匹配,匹配含有指定字符串的文本或属性。
# 获取name属性包含'row1'的元素
ele = page.ele('@name:row1')
📌 匹配开头 ^
表示匹配开头,匹配开头为指定字符串的文本或属性。
# 获取name属性以'row1'开头的元素
ele = page.ele('@name^ro')
📌 匹配结尾 $
表示匹配结尾,匹配结尾为指定字符串的文本或属性。
# 获取name属性以'w1'结尾的元素
ele = page.ele('@name$w1')
✅️️ 查找语法
关键字用于指明该语句以哪种方式去查找元素。
📌 id 匹配符 #
表示id
属性,只在语句最前面且单独使用时生效,可配合匹配模式使用。
# 在页面中查找id属性为one的元素
ele1 = page.ele('#one')
# 在ele1元素内查找id属性包含ne文本的元素
ele2 = ele1.ele('#:ne')