mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
2.4.1
This commit is contained in:
parent
ca718c2502
commit
7b8f6ebe03
@ -529,15 +529,11 @@ class ToFrame(object):
|
|||||||
self.page = page
|
self.page = page
|
||||||
|
|
||||||
def __call__(self, condition: Union[int, str, tuple, WebElement, DriverElement] = 'main'):
|
def __call__(self, condition: Union[int, str, tuple, WebElement, DriverElement] = 'main'):
|
||||||
"""用于兼容旧版,以后的版本会删除"""
|
"""跳转到(i)frame,可传入id、name、序号、元素对象、定位符 \n
|
||||||
from warnings import warn
|
:param condition: (i)frame,可传入id、name、序号、元素对象、定位符
|
||||||
warn("建议用to_frame.main()等方式使用此功能。", DeprecationWarning, stacklevel=2)
|
:return: 当前页面对象
|
||||||
|
"""
|
||||||
if condition == 'main':
|
if isinstance(condition, (DriverElement, WebElement)):
|
||||||
self.main()
|
|
||||||
elif condition == 'parent':
|
|
||||||
self.parent()
|
|
||||||
elif isinstance(condition, (DriverElement, WebElement)):
|
|
||||||
self.by_ele(condition)
|
self.by_ele(condition)
|
||||||
elif isinstance(condition, int):
|
elif isinstance(condition, int):
|
||||||
self.by_index(condition)
|
self.by_index(condition)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
目前设置功能只支持 Chrome 浏览器,如要使用其它浏览器,可使用 selenium 原生方法创建 driver,然后用 Drission 对象接收即可。
|
目前设置功能只支持 Chrome 浏览器,如要使用其它浏览器,可使用 selenium 原生方法创建 driver,然后用 Drission 对象接收即可。
|
||||||
|
|
||||||
!> **注意:** 本库所有功能暂时只对 Chrome 做了完整测试。
|
!> **注意:** <br>本库所有功能暂时只对 Chrome 做了完整测试。
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from selenium import webdriver
|
from selenium import webdriver
|
||||||
|
@ -5,10 +5,11 @@ d 模式下的`DriverElement`对象可以对浏览器相应元素进行控制。
|
|||||||
## click()
|
## click()
|
||||||
|
|
||||||
此方法用于点击元素。可以选择是否用 js 方式点击,可以在点击失败时自动重试。默认情况下,使用 selenium 原生的点击方法,如果重试超过限定时间,自动改用 js 方式点击。可通过`by_js`参数设置点击方式。
|
此方法用于点击元素。可以选择是否用 js 方式点击,可以在点击失败时自动重试。默认情况下,使用 selenium 原生的点击方法,如果重试超过限定时间,自动改用 js 方式点击。可通过`by_js`参数设置点击方式。
|
||||||
此设计除了可保证点击成功,还可以用于检测页面上的遮罩层是否消失。遮罩层经常出现在 js 方式翻页的时候,它出现的时候会阻碍 selenium 的原生点击,所以可以通过对其下面的元素不断重试点击,来判断遮罩层是否存在。当然,这个方法是否可行要看具体网页设计。
|
此设计除了可保证点击成功,还可以用于检测页面上的遮罩层是否消失。遮罩层经常出现在 js 方式翻页的时候,它出现的时候会阻碍 selenium
|
||||||
|
的原生点击,所以可以通过对其下面的元素不断重试点击,来判断遮罩层是否存在。当然,这个方法是否可行要看具体网页设计。
|
||||||
而如果直接使用 js 进行点击,则可无视任何遮挡,只要元素在 DOM 内,就能点击得到,这样可以根据须要灵活地对元素进行操作。
|
而如果直接使用 js 进行点击,则可无视任何遮挡,只要元素在 DOM 内,就能点击得到,这样可以根据须要灵活地对元素进行操作。
|
||||||
|
|
||||||
!> 注意:使用 js 方式点击时,是不会进行重试的。
|
!> 注意:<br>使用 js 方式点击时,是不会进行重试的。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
@ -95,8 +96,8 @@ ele.r_click_at(50, 50)
|
|||||||
此方法用于向元素输入文本或组合键,也可用于输入文件路径到`input`元素(文件间用`\n`间隔)。可选择输入前是否清空元素。
|
此方法用于向元素输入文本或组合键,也可用于输入文件路径到`input`元素(文件间用`\n`间隔)。可选择输入前是否清空元素。
|
||||||
insure 参数为 `True` 时可自动确保输入正确。该功能是为了应对 selenium 原生输入在某些i情况下会失效的问题。但只能用于 input 元素且 `type` 为 `text` 的情况。 接收组合键的时候可接收
|
insure 参数为 `True` 时可自动确保输入正确。该功能是为了应对 selenium 原生输入在某些i情况下会失效的问题。但只能用于 input 元素且 `type` 为 `text` 的情况。 接收组合键的时候可接收
|
||||||
selenium 的 `Keys` 对象的值。组合键要放在一个 `tuple` 中传入。
|
selenium 的 `Keys` 对象的值。组合键要放在一个 `tuple` 中传入。
|
||||||
!> **注意:** `insure` 为 `True` 时不能用于接收组合键。
|
!> **注意:** <br>`insure` 为 `True` 时不能用于接收组合键。
|
||||||
?> **Tips:** 有些文本框可以接收回车代替点击按钮,可以直接在文本末尾加上`'\n'`。
|
?> **Tips:** <br>有些文本框可以接收回车代替点击按钮,可以直接在文本末尾加上`'\n'`。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
`SessionOptions`对象用于管理`Session`对象连接配置。
|
`SessionOptions`对象用于管理`Session`对象连接配置。
|
||||||
其使用逻辑与`DriverOptions`相似。
|
其使用逻辑与`DriverOptions`相似。
|
||||||
|
|
||||||
!> **注意:** `SessionOptions`仅用于管理启动配置,程序启动后再修改无效。
|
!> **注意:** <br>`SessionOptions`仅用于管理启动配置,程序启动后再修改无效。
|
||||||
|
|
||||||
# `SessionOptions`类
|
# `SessionOptions`类
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ so = SessionOptions(read_file=False)
|
|||||||
page = MixPage(driver_options=do, session_options=so)
|
page = MixPage(driver_options=do, session_options=so)
|
||||||
```
|
```
|
||||||
|
|
||||||
!> **注意** ,这个时候`Drission`的两个参数都要输入内容,如果其中一个不需要设置可以输入`False`.
|
!> **注意** <br>这个时候`Drission`的两个参数都要输入内容,如果其中一个不需要设置可以输入`False`.
|
||||||
|
|
||||||
如:
|
如:
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ ele2 = ele1.ele('text:some text')
|
|||||||
ele2 = ele1.ele('some text')
|
ele2 = ele1.ele('some text')
|
||||||
```
|
```
|
||||||
|
|
||||||
?> **Tips:** 若要查找的文本包含`text:` ,可下面这样写,即第一个`text:` 为关键字,第二个是要查找的内容:
|
?> **Tips:** <br>若要查找的文本包含`text:` ,可下面这样写,即第一个`text:` 为关键字,第二个是要查找的内容:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
ele2 = page.ele('text:text:')
|
ele2 = page.ele('text:text:')
|
||||||
|
@ -153,7 +153,7 @@ print(page.timeouts)
|
|||||||
|
|
||||||
此属性返回当前标签页的序号。
|
此属性返回当前标签页的序号。
|
||||||
|
|
||||||
!> **注意:** 自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。
|
!> **注意:** <br>自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。
|
||||||
|
|
||||||
## current_tab_handle
|
## current_tab_handle
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
此方法用于转换`MixPage`对象的模式。
|
此方法用于转换`MixPage`对象的模式。
|
||||||
切换后默认在目标模式重新跳转到原模式所在 url。
|
切换后默认在目标模式重新跳转到原模式所在 url。
|
||||||
|
|
||||||
!> **注意:** s 模式转 d 模式时,若浏览器当前网址域名和 s 模式不一样,必定会跳转。
|
!> **注意:** <br>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_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')
|
page.to_frame('tag:iframe')
|
||||||
@ -266,7 +286,8 @@ iframe = page.ele('tag:iframe')
|
|||||||
page.to_frame(iframe)
|
page.to_frame(iframe)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!> **注意:** <br>
|
||||||
|
新版本删除了`to_frame('main')`和`to_frame('parent')`的用法。 <br>请改用`page.to_frame.main()`和`page.to_frame.parent()`的写法。
|
||||||
|
|
||||||
## to_tab()
|
## to_tab()
|
||||||
|
|
||||||
@ -278,7 +299,7 @@ page.to_frame(iframe)
|
|||||||
|
|
||||||
返回:None
|
返回:None
|
||||||
|
|
||||||
!> **注意:** 自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。
|
!> **注意:** <br>自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# 跳转到第一个标签页
|
# 跳转到第一个标签页
|
||||||
@ -306,7 +327,7 @@ page.create_tab('http://www.baidu.com')
|
|||||||
|
|
||||||
此方法用于关闭指定的标签页,标签页可以是序号或 handle 值,可关闭多个。默认关闭当前的。
|
此方法用于关闭指定的标签页,标签页可以是序号或 handle 值,可关闭多个。默认关闭当前的。
|
||||||
|
|
||||||
!> **注意:** 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
|
!> **注意:** <br>当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
@ -326,7 +347,7 @@ page.close_tabs((0, 2))
|
|||||||
|
|
||||||
此方法用于关闭指定标签页以外的标签页,标签页可以是序号或 handle 值,可保留多个。默认保留当前的。
|
此方法用于关闭指定标签页以外的标签页,标签页可以是序号或 handle 值,可保留多个。默认保留当前的。
|
||||||
|
|
||||||
!> **注意:** 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
|
!> **注意:** <br>当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
|
@ -146,4 +146,4 @@ page = MixPage()
|
|||||||
|
|
||||||
这个功能支持用户保存不同的配置文件,按情况调研,也可以支持直接把配置写在代码里面,屏蔽读取配置文件。
|
这个功能支持用户保存不同的配置文件,按情况调研,也可以支持直接把配置写在代码里面,屏蔽读取配置文件。
|
||||||
|
|
||||||
?> **Tips:** 当须要打包程序时,必须把配置写到代码里,否则会报错。
|
?> **Tips:** <br>当须要打包程序时,必须把配置写到代码里,否则会报错。
|
@ -33,7 +33,7 @@ page.get('https://www.baidu.com')
|
|||||||
|
|
||||||
## 手动配置方式
|
## 手动配置方式
|
||||||
|
|
||||||
!> **注意:** 这段代码只用于设置配置文件中的路径信息,**运行一次即可**,勿写到正式程序里 。
|
!> **注意:** <br>这段代码只用于设置配置文件中的路径信息,**运行一次即可**,勿写到正式程序里 。
|
||||||
|
|
||||||
有些版本的 Chrome 程序无法获取正确的 driver,就须要手动配置路径。
|
有些版本的 Chrome 程序无法获取正确的 driver,就须要手动配置路径。
|
||||||
新建一个**临时文件** ,修改并运行以下代码,可手动指定 Chrome 和 driver 路径,记录到配置文件,以后程序会自动读取其中的配置,无须再写。
|
新建一个**临时文件** ,修改并运行以下代码,可手动指定 Chrome 和 driver 路径,记录到配置文件,以后程序会自动读取其中的配置,无须再写。
|
||||||
|
@ -19,7 +19,7 @@ page.get(url)
|
|||||||
title = page('tag:h1').text
|
title = page('tag:h1').text
|
||||||
```
|
```
|
||||||
|
|
||||||
?> **Tips:** DrissionPage 自带默认 headers
|
?> **Tips:** <br>DrissionPage 自带默认 headers
|
||||||
|
|
||||||
## 下载文件
|
## 下载文件
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ for div in divs:
|
|||||||
page.download(img_url, r'.\imgs', rename=name)
|
page.download(img_url, r'.\imgs', rename=name)
|
||||||
```
|
```
|
||||||
|
|
||||||
?> **Tips:** 程序中无须创建`imgs`文件夹,`download()`方法会自动创建。
|
?> **Tips:** <br>程序中无须创建`imgs`文件夹,`download()`方法会自动创建。
|
||||||
|
|
||||||
# 结果
|
# 结果
|
||||||
|
|
||||||
@ -62,4 +62,4 @@ for div in divs:
|
|||||||
除此以外,遇到保存路径有重名文件时,该方法也能自动对新文件进行重命名(添加序号),避免路径冲突。
|
除此以外,遇到保存路径有重名文件时,该方法也能自动对新文件进行重命名(添加序号),避免路径冲突。
|
||||||
该方法会返回已下载文件的绝对路径,方便程序进一步使用。
|
该方法会返回已下载文件的绝对路径,方便程序进一步使用。
|
||||||
|
|
||||||
?> **Tips:** 遇到重名时,`download()`方法可选择`skip`、`overwrite`、`rename`三种方式处理。
|
?> **Tips:** <br>遇到重名时,`download()`方法可选择`skip`、`overwrite`、`rename`三种方式处理。
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
实际上,因为`MixPage`会自动根据传入配置创建`Drission`对象,因此只需设置不同的`DriverOptions`和`MixPage`对象即可。
|
实际上,因为`MixPage`会自动根据传入配置创建`Drission`对象,因此只需设置不同的`DriverOptions`和`MixPage`对象即可。
|
||||||
|
|
||||||
!> **注意:** 这些对象必须设置不同的`local_port`和`user_data_path`参数,否则会造成冲突。
|
!> **注意:** <br>这些对象必须设置不同的`local_port`和`user_data_path`参数,否则会造成冲突。
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from DrissionPage.config import DriverOptions
|
from DrissionPage.config import DriverOptions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user