This commit is contained in:
g1879 2022-01-29 23:57:36 +08:00
parent adfe628019
commit bf5e05324f
5 changed files with 61 additions and 88 deletions

View File

@ -578,45 +578,6 @@ class DriverElement(DrissionElement):
"""
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]:
"""提交表单"""
try:

View File

@ -415,45 +415,6 @@ class DriverPage(BasePage):
ele = self.ele(loc_or_ele)
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:
"""刷新当前页面"""
self.driver.refresh()

View File

@ -20,7 +20,7 @@ selenium 缺乏对浏览器下载文件的有效管理,难以进行检测下
# 单线程下载方式
`MixPage`对象的`download`属性是一个`DownloadKit`对象,为尽量与旧版兼容,该属性可直接调用。如`page.download(url, path)`
使用这个方式时效果与旧版一致,会阻塞程序直到任务结束,因此更加建议用后文讲述的多线程方法。
?> 使用这个方式时效果与旧版一致,下载一个文件时会阻塞程序,因此更加建议用后文讲述的多线程方法。
参数:
@ -62,12 +62,14 @@ urlhttps://www.baidu.com/img/flexible/logo/pc/result.png
(True, 'C:\\download\\img.png')
```
# 多线程下载方式
# 多线程并发下载方式
你可以往`DownloadKit`对象添加个数不限的下载任务,它会自动调配线程去完成这些任务。
当前默认为 10 个线程,以后的版本会增加修改线程数功能
默认为 10 个线程。
## `add()`方法
## 添加任务
使用`add()`方法添加任务
参数:
@ -105,7 +107,7 @@ print(mission.rate, mission.info)
90% '下载中'
```
## `show()`方法
## 实时查看所有线程进度
多线程方式不会实时显示下载进度,可用`show()`方法把下载进度打印出来。
@ -137,8 +139,7 @@ page.download.show()
## 等待任务结束
有时须要等待任务结束,以便获取结果,可用`wait()`方法。
当传入任务时,等待该任务结束并返回结果,不传入参数时等待所有任务结束。
有时须要等待任务结束,以便获取结果,可用`wait()`方法。 当传入任务时,等待该任务结束并返回结果。不传入参数时等待所有任务结束,与`show()`方法一致。
参数:
@ -166,3 +167,51 @@ urlhttps://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png
目标路径D:\files
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'
```

View File

@ -2,4 +2,5 @@ selenium
requests
tldextract
lxml
cssselect
cssselect
DownloadKit

View File

@ -6,7 +6,7 @@ with open("README.md", "r", encoding='utf-8') as fh:
setup(
name="DrissionPage",
version="2.4.3",
version="2.5.0",
author="g1879",
author_email="g1879@qq.com",
description="A module that integrates selenium and requests session, encapsulates common page operations.",
@ -21,7 +21,8 @@ setup(
"selenium",
"lxml",
"tldextract",
"requests"
"requests",
"DownloadKit"
],
classifiers=[
"Programming Language :: Python :: 3.6",