From 7b8f6ebe03a77e4ffc23cdd9a9877163179ba23b Mon Sep 17 00:00:00 2001 From: g1879 Date: Wed, 19 Jan 2022 21:41:22 +0800 Subject: [PATCH] 2.4.1 --- DrissionPage/driver_page.py | 14 +++------ docs/使用方法/使用其它浏览器.md | 2 +- docs/使用方法/元素操作.md | 9 +++--- docs/使用方法/启动配置/Session启动配置.md | 2 +- docs/使用方法/打包程序.md | 2 +- docs/使用方法/查找页面元素.md | 2 +- docs/使用方法/获取网页信息.md | 2 +- docs/使用方法/页面操作.md | 33 ++++++++++++++++---- docs/入门指南/基本概念.md | 2 +- docs/入门指南/快速上手.md | 2 +- docs/入门指南/特性演示/与requests代码对比.md | 2 +- docs/实用示例/下载星巴克产品图片.md | 4 +-- docs/实用示例/同时操作多个浏览器.md | 2 +- 13 files changed, 48 insertions(+), 30 deletions(-) diff --git a/DrissionPage/driver_page.py b/DrissionPage/driver_page.py index 7828d6b..4a91737 100644 --- a/DrissionPage/driver_page.py +++ b/DrissionPage/driver_page.py @@ -529,15 +529,11 @@ class ToFrame(object): self.page = page def __call__(self, condition: Union[int, str, tuple, WebElement, DriverElement] = 'main'): - """用于兼容旧版,以后的版本会删除""" - from warnings import warn - warn("建议用to_frame.main()等方式使用此功能。", DeprecationWarning, stacklevel=2) - - if condition == 'main': - self.main() - elif condition == 'parent': - self.parent() - elif isinstance(condition, (DriverElement, WebElement)): + """跳转到(i)frame,可传入id、name、序号、元素对象、定位符 \n + :param condition: (i)frame,可传入id、name、序号、元素对象、定位符 + :return: 当前页面对象 + """ + if isinstance(condition, (DriverElement, WebElement)): self.by_ele(condition) elif isinstance(condition, int): self.by_index(condition) diff --git a/docs/使用方法/使用其它浏览器.md b/docs/使用方法/使用其它浏览器.md index e66a6a2..beff2a0 100644 --- a/docs/使用方法/使用其它浏览器.md +++ b/docs/使用方法/使用其它浏览器.md @@ -1,6 +1,6 @@ 目前设置功能只支持 Chrome 浏览器,如要使用其它浏览器,可使用 selenium 原生方法创建 driver,然后用 Drission 对象接收即可。 -!> **注意:** 本库所有功能暂时只对 Chrome 做了完整测试。 +!> **注意:**
本库所有功能暂时只对 Chrome 做了完整测试。 ```python from selenium import webdriver diff --git a/docs/使用方法/元素操作.md b/docs/使用方法/元素操作.md index d1fb643..98aa2f4 100644 --- a/docs/使用方法/元素操作.md +++ b/docs/使用方法/元素操作.md @@ -5,10 +5,11 @@ d 模式下的`DriverElement`对象可以对浏览器相应元素进行控制。 ## click() 此方法用于点击元素。可以选择是否用 js 方式点击,可以在点击失败时自动重试。默认情况下,使用 selenium 原生的点击方法,如果重试超过限定时间,自动改用 js 方式点击。可通过`by_js`参数设置点击方式。 -此设计除了可保证点击成功,还可以用于检测页面上的遮罩层是否消失。遮罩层经常出现在 js 方式翻页的时候,它出现的时候会阻碍 selenium 的原生点击,所以可以通过对其下面的元素不断重试点击,来判断遮罩层是否存在。当然,这个方法是否可行要看具体网页设计。 +此设计除了可保证点击成功,还可以用于检测页面上的遮罩层是否消失。遮罩层经常出现在 js 方式翻页的时候,它出现的时候会阻碍 selenium +的原生点击,所以可以通过对其下面的元素不断重试点击,来判断遮罩层是否存在。当然,这个方法是否可行要看具体网页设计。 而如果直接使用 js 进行点击,则可无视任何遮挡,只要元素在 DOM 内,就能点击得到,这样可以根据须要灵活地对元素进行操作。 -!> 注意:使用 js 方式点击时,是不会进行重试的。 +!> 注意:
使用 js 方式点击时,是不会进行重试的。 参数: @@ -95,8 +96,8 @@ ele.r_click_at(50, 50) 此方法用于向元素输入文本或组合键,也可用于输入文件路径到`input`元素(文件间用`\n`间隔)。可选择输入前是否清空元素。 insure 参数为 `True` 时可自动确保输入正确。该功能是为了应对 selenium 原生输入在某些i情况下会失效的问题。但只能用于 input 元素且 `type` 为 `text` 的情况。 接收组合键的时候可接收 selenium 的 `Keys` 对象的值。组合键要放在一个 `tuple` 中传入。 -!> **注意:** `insure` 为 `True` 时不能用于接收组合键。 -?> **Tips:** 有些文本框可以接收回车代替点击按钮,可以直接在文本末尾加上`'\n'`。 +!> **注意:**
`insure` 为 `True` 时不能用于接收组合键。 +?> **Tips:**
有些文本框可以接收回车代替点击按钮,可以直接在文本末尾加上`'\n'`。 参数: diff --git a/docs/使用方法/启动配置/Session启动配置.md b/docs/使用方法/启动配置/Session启动配置.md index bc5a827..d2ac7c5 100644 --- a/docs/使用方法/启动配置/Session启动配置.md +++ b/docs/使用方法/启动配置/Session启动配置.md @@ -1,7 +1,7 @@ `SessionOptions`对象用于管理`Session`对象连接配置。 其使用逻辑与`DriverOptions`相似。 -!> **注意:** `SessionOptions`仅用于管理启动配置,程序启动后再修改无效。 +!> **注意:**
`SessionOptions`仅用于管理启动配置,程序启动后再修改无效。 # `SessionOptions`类 diff --git a/docs/使用方法/打包程序.md b/docs/使用方法/打包程序.md index 1656c55..da248a6 100644 --- a/docs/使用方法/打包程序.md +++ b/docs/使用方法/打包程序.md @@ -23,7 +23,7 @@ so = SessionOptions(read_file=False) page = MixPage(driver_options=do, session_options=so) ``` -!> **注意** ,这个时候`Drission`的两个参数都要输入内容,如果其中一个不需要设置可以输入`False`. +!> **注意**
这个时候`Drission`的两个参数都要输入内容,如果其中一个不需要设置可以输入`False`. 如: diff --git a/docs/使用方法/查找页面元素.md b/docs/使用方法/查找页面元素.md index e7b7d55..6b2d78d 100644 --- a/docs/使用方法/查找页面元素.md +++ b/docs/使用方法/查找页面元素.md @@ -321,7 +321,7 @@ ele2 = ele1.ele('text:some text') ele2 = ele1.ele('some text') ``` -?> **Tips:** 若要查找的文本包含`text:` ,可下面这样写,即第一个`text:` 为关键字,第二个是要查找的内容: +?> **Tips:**
若要查找的文本包含`text:` ,可下面这样写,即第一个`text:` 为关键字,第二个是要查找的内容: ```python ele2 = page.ele('text:text:') diff --git a/docs/使用方法/获取网页信息.md b/docs/使用方法/获取网页信息.md index 834b1c7..5c09d66 100644 --- a/docs/使用方法/获取网页信息.md +++ b/docs/使用方法/获取网页信息.md @@ -153,7 +153,7 @@ print(page.timeouts) 此属性返回当前标签页的序号。 -!> **注意:** 自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。 +!> **注意:**
自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。 ## current_tab_handle diff --git a/docs/使用方法/页面操作.md b/docs/使用方法/页面操作.md index c20efcc..e0414ce 100644 --- a/docs/使用方法/页面操作.md +++ b/docs/使用方法/页面操作.md @@ -17,7 +17,7 @@ 此方法用于转换`MixPage`对象的模式。 切换后默认在目标模式重新跳转到原模式所在 url。 -!> **注意:** s 模式转 d 模式时,若浏览器当前网址域名和 s 模式不一样,必定会跳转。 +!> **注意:**
s 模式转 d 模式时,若浏览器当前网址域名和 s 模式不一样,必定会跳转。 参数: @@ -256,7 +256,27 @@ page.to_frame.by_id('iframe_id') page.to_frame.by_name('iframe_name') # 切换到页面中第一个框架 -page.to_frame.by_id(0) +page.to_frame.by_index(0) + +# 使用定位符查找元素,再实现切换 +page.to_frame.by_loc('tag:iframe') + +# 先获取 iframe 元素,再传入实现切换 +iframe = page.ele('tag:iframe') +page.to_frame.by_ele(iframe) +``` + +`ToFrame`类实现了`__call__()`方法,可自动判断传入类型,使用比较简便。 + +```python +# 切换到 id 值为 'iframe_id' 的框架 +page.to_frame('iframe_id') + +# 切换到 name 值为 'iframe_name' 的框架 +page.to_frame('iframe_name') + +# 切换到页面中第一个框架 +page.to_frame(0) # 使用定位符查找元素,再实现切换 page.to_frame('tag:iframe') @@ -266,7 +286,8 @@ iframe = page.ele('tag:iframe') page.to_frame(iframe) ``` - +!> **注意:**
+新版本删除了`to_frame('main')`和`to_frame('parent')`的用法。
请改用`page.to_frame.main()`和`page.to_frame.parent()`的写法。 ## to_tab() @@ -278,7 +299,7 @@ page.to_frame(iframe) 返回:None -!> **注意:** 自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。 +!> **注意:**
自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。 ```python # 跳转到第一个标签页 @@ -306,7 +327,7 @@ page.create_tab('http://www.baidu.com') 此方法用于关闭指定的标签页,标签页可以是序号或 handle 值,可关闭多个。默认关闭当前的。 -!> **注意:** 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。 +!> **注意:**
当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。 参数: @@ -326,7 +347,7 @@ page.close_tabs((0, 2)) 此方法用于关闭指定标签页以外的标签页,标签页可以是序号或 handle 值,可保留多个。默认保留当前的。 -!> **注意:** 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。 +!> **注意:**
当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。 参数: diff --git a/docs/入门指南/基本概念.md b/docs/入门指南/基本概念.md index df28566..d6fbbf3 100644 --- a/docs/入门指南/基本概念.md +++ b/docs/入门指南/基本概念.md @@ -146,4 +146,4 @@ page = MixPage() 这个功能支持用户保存不同的配置文件,按情况调研,也可以支持直接把配置写在代码里面,屏蔽读取配置文件。 -?> **Tips:** 当须要打包程序时,必须把配置写到代码里,否则会报错。 \ No newline at end of file +?> **Tips:**
当须要打包程序时,必须把配置写到代码里,否则会报错。 \ No newline at end of file diff --git a/docs/入门指南/快速上手.md b/docs/入门指南/快速上手.md index 58bf6d9..89f7c90 100644 --- a/docs/入门指南/快速上手.md +++ b/docs/入门指南/快速上手.md @@ -33,7 +33,7 @@ page.get('https://www.baidu.com') ## 手动配置方式 -!> **注意:** 这段代码只用于设置配置文件中的路径信息,**运行一次即可**,勿写到正式程序里 。 +!> **注意:**
这段代码只用于设置配置文件中的路径信息,**运行一次即可**,勿写到正式程序里 。 有些版本的 Chrome 程序无法获取正确的 driver,就须要手动配置路径。 新建一个**临时文件** ,修改并运行以下代码,可手动指定 Chrome 和 driver 路径,记录到配置文件,以后程序会自动读取其中的配置,无须再写。 diff --git a/docs/入门指南/特性演示/与requests代码对比.md b/docs/入门指南/特性演示/与requests代码对比.md index 7b412a1..b3a3afd 100644 --- a/docs/入门指南/特性演示/与requests代码对比.md +++ b/docs/入门指南/特性演示/与requests代码对比.md @@ -19,7 +19,7 @@ page.get(url) title = page('tag:h1').text ``` -?> **Tips:** DrissionPage 自带默认 headers +?> **Tips:**
DrissionPage 自带默认 headers ## 下载文件 diff --git a/docs/实用示例/下载星巴克产品图片.md b/docs/实用示例/下载星巴克产品图片.md index a34e0de..656309f 100644 --- a/docs/实用示例/下载星巴克产品图片.md +++ b/docs/实用示例/下载星巴克产品图片.md @@ -47,7 +47,7 @@ for div in divs: page.download(img_url, r'.\imgs', rename=name) ``` -?> **Tips:** 程序中无须创建`imgs`文件夹,`download()`方法会自动创建。 +?> **Tips:**
程序中无须创建`imgs`文件夹,`download()`方法会自动创建。 # 结果 @@ -62,4 +62,4 @@ for div in divs: 除此以外,遇到保存路径有重名文件时,该方法也能自动对新文件进行重命名(添加序号),避免路径冲突。 该方法会返回已下载文件的绝对路径,方便程序进一步使用。 -?> **Tips:** 遇到重名时,`download()`方法可选择`skip`、`overwrite`、`rename`三种方式处理。 \ No newline at end of file +?> **Tips:**
遇到重名时,`download()`方法可选择`skip`、`overwrite`、`rename`三种方式处理。 \ No newline at end of file diff --git a/docs/实用示例/同时操作多个浏览器.md b/docs/实用示例/同时操作多个浏览器.md index d48e33c..b0d3daa 100644 --- a/docs/实用示例/同时操作多个浏览器.md +++ b/docs/实用示例/同时操作多个浏览器.md @@ -4,7 +4,7 @@ 实际上,因为`MixPage`会自动根据传入配置创建`Drission`对象,因此只需设置不同的`DriverOptions`和`MixPage`对象即可。 -!> **注意:** 这些对象必须设置不同的`local_port`和`user_data_path`参数,否则会造成冲突。 +!> **注意:**
这些对象必须设置不同的`local_port`和`user_data_path`参数,否则会造成冲突。 ```python from DrissionPage.config import DriverOptions