调整注释和文档

This commit is contained in:
g1879 2022-01-17 10:25:57 +08:00
parent 080c501c13
commit 44ff06d00a
8 changed files with 63 additions and 99 deletions

View File

@ -1,14 +1,14 @@
[paths]
chromedriver_path =
tmp_path =
chromedriver_path = D:\python\Chrome92\chromedriver.exe
tmp_path =
[chrome_options]
debugger_address = 127.0.0.1:9222
binary_location =
arguments = ['--no-sandbox', '--disable-gpu', '--ignore-certificate-errors', '--disable-infobars']
binary_location = D:\python\Chrome92\chrome.exe
arguments = ['--no-sandbox', '--disable-gpu', '--ignore-certificate-errors', '--disable-infobars', '--user-data-dir=D:\\python\\Chrome62\\userData']
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']}
timeouts = {'implicit': 10, 'pageLoad': 30, 'script': 30}
timeouts = {'implicit': 10.0, 'pageLoad': 30.0, 'script': 30.0}
set_window_rect = None
page_load_strategy = normal

View File

@ -438,7 +438,7 @@ class DriverElement(DrissionElement):
:param vals: 文本值或按键组合
:param clear: 输入前是否清空文本框
:param insure: 确保输入正确解决文本框有时输入失效的问题不能用于输入组合键
:param timeout: 尝试输入的超时时间不指定则使用父页面的超时时间只在insure_input为True时生效
:param timeout: 尝试输入的超时时间不指定则使用父页面的超时时间只在insure为True时生效
:return: bool
"""
if not insure or self.tag != 'input' or self.prop('type') != 'text': # 普通输入
@ -450,7 +450,7 @@ class DriverElement(DrissionElement):
else: # 确保输入正确
if not isinstance(vals, str):
raise TypeError('insure_input参数生效时vals只能接收str数据。')
raise TypeError('insure参数生效时vals只能接收str数据。')
enter = '\n' if vals.endswith('\n') else None
full_txt = vals if clear else f'{self.attr("value")}{vals}'
full_txt = full_txt.rstrip('\n')

View File

@ -180,49 +180,3 @@ class ShadowRootElement(BaseElement):
except Exception:
return False
# ----------------ShadowRootElement独有方法-----------------------
def _find_eles_by_text(self,
text: str,
tag: str = '',
match: str = 'exact',
single: bool = True) -> Union[DriverElement, List[DriverElement]]:
"""根据文本获取页面元素 \n
:param text: 文本字符串
:param tag: tag name
:param match: 'exact' 'fuzzy'对应精确或模糊匹配
:param single: True则返回第一个False则返回全部
:return: 返回DriverElement对象或组成的列表
"""
# 获取所有元素
eles = self.run_script('return arguments[0].querySelectorAll("*")')
results = []
# 遍历所有元素,找到符合条件的
for ele in eles:
if tag and tag != ele.tag_name:
continue
txt = self.page.driver.execute_script(
'if(arguments[0].firstChild!=null){return arguments[0].firstChild.nodeValue}', ele)
txt = txt or ''
# 匹配没有文本的元素或精确匹配
if text == '' or match == 'exact':
if text == txt:
if single:
return DriverElement(ele, self.page)
else:
results.append(DriverElement(ele, self.page))
# 模糊匹配
elif match == 'fuzzy':
if text in txt:
if single:
return DriverElement(ele, self.page)
else:
results.append(DriverElement(ele, self.page))
return None if single else results

View File

@ -13,9 +13,9 @@
* 使用方法
* [创建页面对象](使用方法\创建页面对象.md)
* [访问网页](使用方法\访问网页.md)
* [获取页面元素](使用方法\获取页面元素.md)
* [查找页面元素](使用方法\查找页面元素.md)
* [获取元素信息](使用方法\获取元素信息.md)
* [操作页面元素](使用方法\操作页面元素.md)
* [元素操作](使用方法\元素操作.md)
* [获取网页信息](使用方法\获取网页信息.md)
* [页面操作](使用方法\页面操作.md)
* 启动配置

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
@ -8,7 +8,7 @@
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
<meta content="Description" name="description">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0" name="viewport">
<link href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css" rel="stylesheet">
<link href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/dark.css" rel="stylesheet">
<link href="//unpkg.com/gitalk/dist/gitalk.css" rel="stylesheet">
<!-- <link rel="stylesheet" href="./ignore/font.css"> -->
<style>
@ -19,7 +19,7 @@
</head>
<body>
<div id="app"></div>
<div id="app">加载中。。。</div>
<script>
window.$docsify = {
count: {
@ -41,7 +41,7 @@
}
},
name: 'DrissionPage',
repo: 'g1879', // github 主页
repo: 'https://gitee.com/g1879/DrissionPage', // 主页
sidebarDisplayLevel: 1, // 折叠层级
autoHeader: true, // 自动增加标题
mergeNavbar: true, //小屏设备下合并导航栏到侧边栏
@ -55,37 +55,27 @@
crossChapter: true
},
}
</script>
<!-- v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
<!-- 折叠侧边栏 -->
<script src="//cdn.jsdelivr.net/npm/docsify-sidebar-collapse/dist/docsify-sidebar-collapse.min.js"></script>
<!--全文搜索,直接用官方提供的无法生效-->
<script src="https://cdn.bootcss.com/docsify/4.5.9/plugins/search.min.js"></script>
<!-- 表情插件 -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/emoji.min.js"></script>
<!-- code高亮 -->
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-python.min.js"></script>
<!-- 复制代码到剪贴板 -->
<script src="//unpkg.com/docsify-copy-code"></script>
<!-- 图片缩放 -->
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></script>
<!-- 字数统计 -->
<script src="//unpkg.com/docsify-count/dist/countable.js"></script>
<!-- 翻页 -->
<script src="//unpkg.com/docsify-pagination/dist/docsify-pagination.min.js"></script>
</body>
</html>

View File

@ -85,10 +85,10 @@ ele.r_click_at(50, 50)
## input()
此方法用于向元素输入文本或组合键,也可用于输入文件路径到 input 元素(文件间用\n间隔。可选择输入前是否清空元素。
insure 参数为 True 时可自动确保输入正确。该功能是为了应对 selenium 原生输入在某些i情况下会失效的问题。
接收组合键的时候可接收 selenium 的 Keys 对象的值。组合键要放在一个 tuple 中传入。
注意insure 为 True 时不能用于接收组合键。
此方法用于向元素输入文本或组合键,也可用于输入文件路径到 input 元素(文件间用 \n 间隔)。可选择输入前是否清空元素。
insure 参数为 `True` 时可自动确保输入正确。该功能是为了应对 selenium 原生输入在某些i情况下会失效的问题。但只能用于 input 元素且 `type` `text` 的情况。 接收组合键的时候可接收
selenium 的 `Keys` 对象的值。组合键要放在一个 `tuple` 中传入。
注意:`insure``True` 时不能用于接收组合键。
**Tips:** 有些文本框可以接收回车代替点击按钮,可以直接在文本末尾加上 '\n'。
参数:
@ -96,9 +96,9 @@ insure 参数为 True 时可自动确保输入正确。该功能是为了应对
- vals文本值或按键组合
- clear输入前是否清空文本框
- insure是否确保输入正确不能用于输入组合键
- timeout尝试输入的超时时间不指定则使用父页面的超时时间只在 insure_input 参数为 True 时生效
- timeout尝试输入的超时时间不指定则使用父页面的超时时间只在 `insure_input` 参数为 `True` 时生效
返回bool表示是否成功输入。insure_input 为 False 时始终返回 True
返回bool 类型,表示是否成功输入。`insure``False` 时始终返回 `True`
```python
# 输入文本

View File

@ -9,7 +9,7 @@
- 根据 DOM 结构相对定位
- 根据页面布局位置相对定位
d 模式的元素还有专门用于处理 shadow dom 的 shadow_root 属性。获取到的元素可继续用这些方法获取后代元素,使用方法和普通元素基本一致。
d 模式的元素还有专门用于处理 shadow dom 的 `shadow_root` 属性。获取到的元素可继续用这些方法获取后代元素,使用方法和普通元素一致。
# 示例
@ -61,6 +61,8 @@ parent = p1.parent()
div2 = p1.after(1, 'tag:div')
```
## 实际示例
复制此代码可直接运行查看结果。
@ -99,8 +101,8 @@ IOT/物联网/边缘计算
参数:
- loc_or_str元素对象拥有元素的定位信息可以是loc元组或查询字符串
- loc_or_ele页面对象拥有元素的定位信息可以是元素对象loc元组或查询字符串
- loc_or_str元素对象拥有元素的定位信息可以是 loc 元组,或查询字符串
- loc_or_ele页面对象拥有元素的定位信息可以是元素对象loc 元组,或查询字符串
- timeout查找元素超时时间默认与元素所在页面等待时间一致s 模式下无效
返回s 模式下返回 SessionElementd 模式下返回 DriverElement或用 xpath 获取到的属性值
@ -116,6 +118,8 @@ ele2 = ele1.ele('search text')
class = ele1.ele('xpath://div/@class')
```
## eles()
此方法与 ele() 相似,但返回的是匹配到的所有元素组成的列表,用 xpath 获取元素属性时,返回属性文本组成的列表。
@ -134,6 +138,8 @@ p_eles = ele.eles('tag:p')
print(p_eles[0])
```
## s_ele()
此方法用于在一个元素下查找后代元素,以 SessionElement 形式返回结果xpath 获取属性值时依然是返回 str也可以直接将一个元素或页面转换为 SessionElement 版本。
@ -144,8 +150,8 @@ s 模式下这个方法和 ele() 是一样的。
参数:
- loc_or_str元素对象拥有元素的定位信息可以是loc元组或查询字符串。为 None 时直接返回当前元素的 SessionElemnet 版本
- loc_or_ele页面对象拥有元素的定位信息可以是loc元组或查询字符串。为 None 时直接返回当前页面的 SessionElemnet 版本
- loc_or_str元素对象拥有元素的定位信息可以是 loc 元组,或查询字符串。为 None 时直接返回当前元素的 SessionElemnet 版本
- loc_or_ele页面对象拥有元素的定位信息可以是 loc 元组,或查询字符串。为 None 时直接返回当前页面的 SessionElemnet 版本
返回SessionElement或用 xpath 获取到的属性值
@ -167,7 +173,7 @@ ele = page.s_ele('search text')
参数:
- loc_or_str元素的定位信息可以是loc元组或查询字符串必填
- loc_or_str元素的定位信息可以是 loc 元组,或查询字符串(必填)
返回SessionElement 组成的列表,或用 xpath 获取到的属性值组成的列表

View File

@ -54,6 +54,8 @@ html = ele.html
"""
```
## inner_html
此属性返回元素的 innerHTML 文本。
@ -67,6 +69,8 @@ Hello World!
"""
```
## tag
此属性返回元素的标签名。
@ -76,6 +80,8 @@ tag = ele.tag
# 返回div
```
## text
此属性返回元素内所有文本组合成的字符串。
@ -89,6 +95,8 @@ Hello World!
"""
```
## raw_text
此属性返回元素内原始文本。
@ -103,6 +111,8 @@ Hello World!
"""
```
## texts()
此方法返回元素内所有直接子节点的文本,包括元素和文本节点。 它有一个参数 text_node_only为True 时则只获取只返回文本节点。这个方法适用于获取文本节点和元素节点混排的情况。
@ -243,20 +253,20 @@ loc = ele.location
# 返回:{'x': 50, 'y': 50}
```
## before
## pseudo_before
此属性以文本形式返回当前元素的 ::before 伪元素内容。
```python
before_txt = ele.before
before_txt = ele.pseudo_before
```
## after
## pseudo_after
此属性以文本形式返回当前元素的 ::after 伪元素内容。
```python
after_txt = ele.after
after_txt = ele.pseudo_after
```
## style()
@ -271,7 +281,11 @@ after_txt = ele.after
返回:样式属性值
```python
prop = ele.style('color', 'first-letter')
# 获取 css 属性的 color 值
prop = ele.style('color')
# 获取 after 伪元素的内容
prop = ele.style('content', 'after')
```
## prop()
@ -285,16 +299,12 @@ prop = ele.style('color', 'first-letter')
返回:属性值
```python
prop = ele.peop('value')
prop = ele.prop('value')
```
## select
此属性返回 select 元素用于处理下拉列表的 Select 类(下一节说明),非下拉列表元素返回 False。
```python
select = ele.select
```
此属性返回 `select` 元素用于处理下拉列表的 Select 类(“元素操作”章节说明),非下拉列表元素返回 False。
## is_selected()
@ -332,25 +342,29 @@ enable = ele.is_enabled()
displayed = ele.is_displayed()
```
# ShadowRootElement 属性
# ShadowRootElement 属性与方法
本库把 shadow dom 的 root 看作一个元素处理,可以获取属性,也可以执行其下级的查找,但其属性比较少。有如下这些:
## tag
元素标签名
此属性返回元素标签名,即 'shadow-root'。
## html
shadow-root 内的 html 文本,与其余两种元素不一样,其余两种的 html 属性获取的是 outerHTMLShadowRootElement 的 html 属性获取的是内部的。
此属性返回 shadow_root 的 html 文本,由 `<shadow_root></shadow_root>` 标签包裹。
## inner_html
此属性返回 shadow_root 内部的 html 文本。
## page
元素所在页面对象。
此属性返回元素所在页面对象。
## inner_ele
从 js 中获取到的 shadow-root 元素。
此属性返回对象中保存的 shadow-root 元素。
## parent_ele