This commit is contained in:
g1879 2021-12-10 23:52:01 +08:00
parent 58dc683fd5
commit 7d7dfb2dd1
5 changed files with 68 additions and 12 deletions

View File

@ -51,7 +51,7 @@ def get_ele_txt(e) -> str:
str_list.append(el)
else:
if sub('[ \n\t]', '', el) != '': # 字符除了回车和空格还有其它内容
if sub('[ \n\t\r]', '', el) != '': # 字符除了回车和空格还有其它内容
txt = el
if not pre:
txt = txt.replace('\n', ' ').strip(' ')

View File

@ -1,10 +1,10 @@
[paths]
chromedriver_path = chromedriver75.exe
chromedriver_path =
tmp_path = D:\python\projects\DrissionPage\DrissionPage\tmp
[chrome_options]
debugger_address = 127.0.0.1:9222
binary_location = D:\python\Google Chrome\Chrome\chrome.exe
debugger_address =
binary_location =
arguments = ['--no-sandbox', '--disable-gpu', '--ignore-certificate-errors', '--disable-infobars']
extensions = []
experimental_options = {'prefs': {'profile.default_content_settings.popups': 0, 'profile.default_content_setting_values': {'notifications': 2}, 'plugins.plugins_list': [{'enabled': False, 'name': 'Chrome PDF Viewer'}]}, 'useAutomationExtension': False, 'excludeSwitches': ['enable-automation']}

View File

@ -1,3 +1,5 @@
# 获取元素信息
```python
element.html # 返回元素 outerHTML
element.inner_html # 返回元素 innerHTML

View File

@ -9,6 +9,30 @@ shadow-root 的 shadow_root 属性。获取到的元素可继续用这些方法
d 模式获取元素的方法内置了等待,默认使用元素所属页面的超时设置,也可用在每次获取元素时单独设置等待时间。
简单示例:
```python
from DrissionPage import MixPage
page = MixPage('s')
page.get('https://gitee.com/explore')
ul_ele = page.ele('tag:ul@@text():全部推荐项目') # 获取包含“全部推荐项目”文本的 ul 元素
titles = ul_ele.eles('tag:a') # 获取该 ul 元素下所有 a 元素
for i in titles: # 遍历列表,打印每个 a 元素的文本
print(i.text)
"""输出:
全部推荐项目
前沿技术
智能硬件
IOT/物联网/边缘计算
车载应用
以下省略……
"""
```
# 方法和属性
## ele()
@ -16,14 +40,19 @@ d 模式获取元素的方法内置了等待,默认使用元素所属页面的
此方法用于查找并返回第一个匹配的元素d 模式下返回 DriverElements 模式下返回 SessionElement用 xpath 获取元素属性时,直接返回属性文本。查找不到结果则返回 None。
```python
ele = page.ele('search text') # 在页面下查找元素
ele2 = ele1.ele('search text') # 在元素查找后代元素
ele1 = page.ele('search text') # 在页面内查找元素
ele2 = ele1.ele('search text') # 在元素查找后代元素
```
## eles()
此方法与 ele() 相似,但返回的是匹配到的所有元素组成的列表,用 xpath 获取元素属性时,返回属性文本组成的列表。
```python
p_eles = ele.eles('tag:p') # 获取 ele 元素内的所有 p 元素
p1 = p_eles[0] # 获取第一个 p 元素
```
## s_ele()
此方法用于在一个元素下查找后代元素,以 SessionElement 形式返回结果xpath 获取属性值时依然是返回 str也可以直接将一个元素转换为 SessionElement 版本。
@ -46,32 +75,47 @@ ele = page.s_ele('search text') # 在页面下查找元素,并以 SessionElem
此属性返回当前元素的后一个兄弟元素。
```python
ele2 = ele1.next # 获取 ele1 后面一个兄弟元素
```
## prev
此属性返回当前元素的前一个兄弟元素。
```python
ele2 = ele1.prev # 获取 ele1 前面一个兄弟元素
```
## parent
此属性返回当前元素的父元素。
```python
ele2 = ele1.parent # 获取 ele1 的父元素
```
## nexts()
此方法返回当前元素后面第若干个兄弟元素。
```python
ele2 = ele1.nexts(3) # 获取 ele1 后面第三个兄弟元素
```
## prevs()
此方法返回当前元素前面第若干个兄弟元素。
```python
ele2 = ele1.prevs(3) # 获取 ele1 前面第三个兄弟元素
```
## parents()
此方法返回当前元素第若干层祖先元素。
```python
ele2 = ele1.next # 获取 ele1 后面一个兄弟元素
ele2 = ele1.prev # 获取 ele1 前面一个兄弟元素
ele2 = ele1.parent # 获取 ele1 的父元素
ele2 = ele1.nexts(3) # 获取 ele1 后面第三个兄弟元素
ele2 = ele1.prevs(3) # 获取 ele1 前面第三个兄弟元素
ele2 = ele1.parents(3) # 获取 ele1 上面 3 层父元素
```
@ -183,8 +227,12 @@ ele2 = ele1.ele('tag:div') # 定位 div 元素
ele2 = ele1.ele('tag:div@class=cls') # 定位 class 属性为 cls 的 div 元素
ele2 = ele1.ele('tag:div@text()=text') # 定位文本为 text 的 div 元素
ele2 = ele1.ele('tag:div@@class=cls@@text()=text') # 定位 class 属性为 cls 且文本为 text 的 div 元素
ele2 = ele1.ele('tag:div@text():text') # 查找直接文本节点包含 text 字符串的 div 元素
ele2 = ele1.ele('tag:div@@text():text') # 查找内部文本节点包含 text 字符串的 div 元素
```
**Tips:** 注意, `'tag:div@text():text'``'tag:div@@text():text'` 是有区别的,前者只在 div 的直接文本节点搜索,后者搜索 div 的整个内部。
## css
表示用 css selector 方式查找元素。css: 与 css= 效果一致。
@ -197,14 +245,20 @@ ele2 = ele1.ele('css:>div') # 查找 div 子元素元素,这个写法是本
## xpath
表示用 xpath 方式查找元素。xpath: 与 xpath= 效果一致。
该方法支持完整的 xpath 语法,能使用 xpath 直接获取元素属性selenium 不支持这种用法。
```python
ele2 = ele1.ele('xpath:.//div') # 查找 div 元素
ele2 = ele1.ele('xpath://div') # 和上面一行一样,查找元素的后代时,// 前面的 . 可以省略
txt = ele1.ele('xpath://div/@class') # 获取 div 元素的 class 属性,返回字符串
```
**Tips:** 查找元素的后代时,// 前面的 . 可以省略。
## selenium 的 loc 元组
查找方法能直接接收 selenium 原生定位元组进行查找s 模式下也支持这种写法。
```python
loc1 = By.ID, 'ele_id'
loc2 = By.XPATH, '//div[@class="ele_class"]'