mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
2.5.0
This commit is contained in:
parent
adfe628019
commit
bf5e05324f
@ -578,45 +578,6 @@ class DriverElement(DrissionElement):
|
|||||||
"""
|
"""
|
||||||
return self.inner_ele.parent.execute_script(script, self.inner_ele, *args)
|
return self.inner_ele.parent.execute_script(script, self.inner_ele, *args)
|
||||||
|
|
||||||
def scroll_to(self, mode: str = 'bottom', pixel: int = 300) -> None:
|
|
||||||
"""按参数指示方式滚动元素 \n
|
|
||||||
:param mode: 可选滚动方向:'top', 'bottom', 'half', 'rightmost', 'leftmost', 'up', 'down', 'left', 'right'
|
|
||||||
:param pixel: 滚动的像素
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
from warnings import warn
|
|
||||||
warn("此方法下个版本将停用,请用scroll属性代替。", DeprecationWarning, stacklevel=2)
|
|
||||||
if mode == 'top':
|
|
||||||
self.scroll.to_top()
|
|
||||||
|
|
||||||
elif mode == 'bottom':
|
|
||||||
self.scroll.to_bottom()
|
|
||||||
|
|
||||||
elif mode == 'half':
|
|
||||||
self.scroll.to_half()
|
|
||||||
|
|
||||||
elif mode == 'rightmost':
|
|
||||||
self.scroll.to_rightmost()
|
|
||||||
|
|
||||||
elif mode == 'leftmost':
|
|
||||||
self.scroll.to_leftmost()
|
|
||||||
|
|
||||||
elif mode == 'up':
|
|
||||||
self.scroll.up(pixel)
|
|
||||||
|
|
||||||
elif mode == 'down':
|
|
||||||
self.scroll.down(pixel)
|
|
||||||
|
|
||||||
elif mode == 'left':
|
|
||||||
self.scroll.left(pixel)
|
|
||||||
|
|
||||||
elif mode == 'right':
|
|
||||||
self.scroll.right(pixel)
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ValueError("mode参数只能是'top', 'bottom', 'half', 'rightmost', "
|
|
||||||
"'leftmost', 'up', 'down', 'left', 'right'。")
|
|
||||||
|
|
||||||
def submit(self) -> Union[bool, None]:
|
def submit(self) -> Union[bool, None]:
|
||||||
"""提交表单"""
|
"""提交表单"""
|
||||||
try:
|
try:
|
||||||
|
@ -415,45 +415,6 @@ class DriverPage(BasePage):
|
|||||||
ele = self.ele(loc_or_ele)
|
ele = self.ele(loc_or_ele)
|
||||||
ele.run_script("arguments[0].scrollIntoView();")
|
ele.run_script("arguments[0].scrollIntoView();")
|
||||||
|
|
||||||
def scroll_to(self, mode: str = 'bottom', pixel: int = 300) -> None:
|
|
||||||
"""按参数指示方式滚动页面 \n
|
|
||||||
:param mode: 可选滚动方向:'top', 'bottom', 'half', 'rightmost', 'leftmost', 'up', 'down', 'left', 'right'
|
|
||||||
:param pixel: 滚动的像素
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
from warnings import warn
|
|
||||||
warn("此方法下个版本将停用,请用scroll属性代替。", DeprecationWarning, stacklevel=2)
|
|
||||||
if mode == 'top':
|
|
||||||
self.scroll.to_top()
|
|
||||||
|
|
||||||
elif mode == 'bottom':
|
|
||||||
self.scroll.to_bottom()
|
|
||||||
|
|
||||||
elif mode == 'half':
|
|
||||||
self.scroll.to_half()
|
|
||||||
|
|
||||||
elif mode == 'rightmost':
|
|
||||||
self.scroll.to_rightmost()
|
|
||||||
|
|
||||||
elif mode == 'leftmost':
|
|
||||||
self.scroll.to_leftmost()
|
|
||||||
|
|
||||||
elif mode == 'up':
|
|
||||||
self.scroll.up(pixel)
|
|
||||||
|
|
||||||
elif mode == 'down':
|
|
||||||
self.scroll.down(pixel)
|
|
||||||
|
|
||||||
elif mode == 'left':
|
|
||||||
self.scroll.left(pixel)
|
|
||||||
|
|
||||||
elif mode == 'right':
|
|
||||||
self.scroll.right(pixel)
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ValueError("mode参数只能是'top', 'bottom', 'half', 'rightmost', "
|
|
||||||
"'leftmost', 'up', 'down', 'left', 'right'。")
|
|
||||||
|
|
||||||
def refresh(self) -> None:
|
def refresh(self) -> None:
|
||||||
"""刷新当前页面"""
|
"""刷新当前页面"""
|
||||||
self.driver.refresh()
|
self.driver.refresh()
|
||||||
|
@ -20,7 +20,7 @@ selenium 缺乏对浏览器下载文件的有效管理,难以进行检测下
|
|||||||
# 单线程下载方式
|
# 单线程下载方式
|
||||||
|
|
||||||
`MixPage`对象的`download`属性是一个`DownloadKit`对象,为尽量与旧版兼容,该属性可直接调用。如`page.download(url, path)`
|
`MixPage`对象的`download`属性是一个`DownloadKit`对象,为尽量与旧版兼容,该属性可直接调用。如`page.download(url, path)`
|
||||||
使用这个方式时效果与旧版一致,会阻塞程序直到任务结束,因此更加建议用后文讲述的多线程方法。
|
?> 使用这个方式时效果与旧版一致,下载一个文件时会阻塞程序,因此更加建议用后文讲述的多线程方法。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
@ -62,12 +62,14 @@ url:https://www.baidu.com/img/flexible/logo/pc/result.png
|
|||||||
(True, 'C:\\download\\img.png')
|
(True, 'C:\\download\\img.png')
|
||||||
```
|
```
|
||||||
|
|
||||||
# 多线程下载方式
|
# 多线程并发下载方式
|
||||||
|
|
||||||
你可以往`DownloadKit`对象添加个数不限的下载任务,它会自动调配线程去完成这些任务。
|
你可以往`DownloadKit`对象添加个数不限的下载任务,它会自动调配线程去完成这些任务。
|
||||||
当前默认为 10 个线程,以后的版本会增加修改线程数功能。
|
默认为 10 个线程。
|
||||||
|
|
||||||
## `add()`方法
|
## 添加任务
|
||||||
|
|
||||||
|
使用`add()`方法添加任务
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
@ -105,7 +107,7 @@ print(mission.rate, mission.info)
|
|||||||
90% '下载中'
|
90% '下载中'
|
||||||
```
|
```
|
||||||
|
|
||||||
## `show()`方法
|
## 实时查看所有线程进度
|
||||||
|
|
||||||
多线程方式不会实时显示下载进度,可用`show()`方法把下载进度打印出来。
|
多线程方式不会实时显示下载进度,可用`show()`方法把下载进度打印出来。
|
||||||
|
|
||||||
@ -137,8 +139,7 @@ page.download.show()
|
|||||||
|
|
||||||
## 等待任务结束
|
## 等待任务结束
|
||||||
|
|
||||||
有时须要等待任务结束,以便获取结果,可用`wait()`方法。
|
有时须要等待任务结束,以便获取结果,可用`wait()`方法。 当传入任务时,等待该任务结束并返回结果。不传入参数时等待所有任务结束,与`show()`方法一致。
|
||||||
当传入任务时,等待该任务结束并返回结果,不传入参数时等待所有任务结束。
|
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
@ -166,3 +167,51 @@ url:https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png
|
|||||||
目标路径:D:\files
|
目标路径:D:\files
|
||||||
100% 下载完成 D:\files\PCfb_5bf082d29588c07f842ccde3f97243ea_4.png
|
100% 下载完成 D:\files\PCfb_5bf082d29588c07f842ccde3f97243ea_4.png
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 获取某个任务结果
|
||||||
|
|
||||||
|
从`add()`方法返回的`Mission`对象,可查看该任务执行情况。
|
||||||
|
|
||||||
|
`Mission`对象属性:
|
||||||
|
|
||||||
|
- id:任务 id
|
||||||
|
- file_name:要保存的文件名
|
||||||
|
- path:要保存的路径
|
||||||
|
- data:任务数据
|
||||||
|
- state:任务状态,有`'waiting'`、`'running'`、`'done'`三种
|
||||||
|
- rate:任务进度,以百分比显示
|
||||||
|
- info:任务信息,成功会返回文件绝对路径,失败会显示原因
|
||||||
|
- result:任务结果,`True`表示成功,`False`表示失败,`None`表示跳过
|
||||||
|
|
||||||
|
```python
|
||||||
|
mission = page.download.add(url)
|
||||||
|
print(mission.state)
|
||||||
|
```
|
||||||
|
|
||||||
|
输出:
|
||||||
|
|
||||||
|
```python
|
||||||
|
running
|
||||||
|
```
|
||||||
|
|
||||||
|
## 下载设置
|
||||||
|
|
||||||
|
可使用以下属性进行配置:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# 设置线程数,只能在没有任务在运行的时候进行
|
||||||
|
page.download.size = 20
|
||||||
|
|
||||||
|
# 设置保存路径,设置后每个任务会使用这个路径,也可添加任务时单独设置
|
||||||
|
page.download.goal_path = r'D:\tmp'
|
||||||
|
|
||||||
|
# 设置重试次数,初始为3
|
||||||
|
page.download.retry = 5
|
||||||
|
|
||||||
|
# 设置失败重试间隔,初始为5
|
||||||
|
page.download.interval = 2
|
||||||
|
|
||||||
|
# 设置存在文件名冲突时的处理方式,可选 'skip', 'overwrite', 'rename'
|
||||||
|
page.download.file_exists = 'skip'
|
||||||
|
```
|
||||||
|
|
||||||
|
@ -2,4 +2,5 @@ selenium
|
|||||||
requests
|
requests
|
||||||
tldextract
|
tldextract
|
||||||
lxml
|
lxml
|
||||||
cssselect
|
cssselect
|
||||||
|
DownloadKit
|
5
setup.py
5
setup.py
@ -6,7 +6,7 @@ with open("README.md", "r", encoding='utf-8') as fh:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="DrissionPage",
|
name="DrissionPage",
|
||||||
version="2.4.3",
|
version="2.5.0",
|
||||||
author="g1879",
|
author="g1879",
|
||||||
author_email="g1879@qq.com",
|
author_email="g1879@qq.com",
|
||||||
description="A module that integrates selenium and requests session, encapsulates common page operations.",
|
description="A module that integrates selenium and requests session, encapsulates common page operations.",
|
||||||
@ -21,7 +21,8 @@ setup(
|
|||||||
"selenium",
|
"selenium",
|
||||||
"lxml",
|
"lxml",
|
||||||
"tldextract",
|
"tldextract",
|
||||||
"requests"
|
"requests",
|
||||||
|
"DownloadKit"
|
||||||
],
|
],
|
||||||
classifiers=[
|
classifiers=[
|
||||||
"Programming Language :: Python :: 3.6",
|
"Programming Language :: Python :: 3.6",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user