调整注释和文档

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] [paths]
chromedriver_path = chromedriver_path = D:\python\Chrome92\chromedriver.exe
tmp_path = tmp_path =
[chrome_options] [chrome_options]
debugger_address = 127.0.0.1:9222 debugger_address = 127.0.0.1:9222
binary_location = binary_location = D:\python\Chrome92\chrome.exe
arguments = ['--no-sandbox', '--disable-gpu', '--ignore-certificate-errors', '--disable-infobars'] arguments = ['--no-sandbox', '--disable-gpu', '--ignore-certificate-errors', '--disable-infobars', '--user-data-dir=D:\\python\\Chrome62\\userData']
extensions = [] 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']} 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 set_window_rect = None
page_load_strategy = normal page_load_strategy = normal

View File

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

View File

@ -180,49 +180,3 @@ class ShadowRootElement(BaseElement):
except Exception: except Exception:
return False 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) * [元素操作](使用方法\元素操作.md)
* [获取网页信息](使用方法\获取网页信息.md) * [获取网页信息](使用方法\获取网页信息.md)
* [页面操作](使用方法\页面操作.md) * [页面操作](使用方法\页面操作.md)
* 启动配置 * 启动配置

View File

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="zh-cn">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@ -8,7 +8,7 @@
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/> <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
<meta content="Description" name="description"> <meta content="Description" name="description">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0" name="viewport"> <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 href="//unpkg.com/gitalk/dist/gitalk.css" rel="stylesheet">
<!-- <link rel="stylesheet" href="./ignore/font.css"> --> <!-- <link rel="stylesheet" href="./ignore/font.css"> -->
<style> <style>
@ -19,7 +19,7 @@
</head> </head>
<body> <body>
<div id="app"></div> <div id="app">加载中。。。</div>
<script> <script>
window.$docsify = { window.$docsify = {
count: { count: {
@ -41,7 +41,7 @@
} }
}, },
name: 'DrissionPage', name: 'DrissionPage',
repo: 'g1879', // github 主页 repo: 'https://gitee.com/g1879/DrissionPage', // 主页
sidebarDisplayLevel: 1, // 折叠层级 sidebarDisplayLevel: 1, // 折叠层级
autoHeader: true, // 自动增加标题 autoHeader: true, // 自动增加标题
mergeNavbar: true, //小屏设备下合并导航栏到侧边栏 mergeNavbar: true, //小屏设备下合并导航栏到侧边栏
@ -55,37 +55,27 @@
crossChapter: true crossChapter: true
}, },
} }
</script> </script>
<!-- v4 --> <!-- v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script> <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="//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="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> <script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/emoji.min.js"></script>
<!-- code高亮 --> <!-- 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-bash.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-python.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-copy-code"></script>
<!-- 图片缩放 --> <!-- 图片缩放 -->
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></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-count/dist/countable.js"></script>
<!-- 翻页 -->
<script src="//unpkg.com/docsify-pagination/dist/docsify-pagination.min.js"></script> <script src="//unpkg.com/docsify-pagination/dist/docsify-pagination.min.js"></script>
</body> </body>
</html> </html>

View File

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

View File

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

View File

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