diff --git a/DrissionPage/driver_element.py b/DrissionPage/driver_element.py index fb1096f..39165df 100644 --- a/DrissionPage/driver_element.py +++ b/DrissionPage/driver_element.py @@ -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: diff --git a/DrissionPage/driver_page.py b/DrissionPage/driver_page.py index 9ec196d..f1d9852 100644 --- a/DrissionPage/driver_page.py +++ b/DrissionPage/driver_page.py @@ -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() diff --git a/docs/使用方法/下载文件.md b/docs/使用方法/下载文件.md index ab64900..c926dfb 100644 --- a/docs/使用方法/下载文件.md +++ b/docs/使用方法/下载文件.md @@ -20,7 +20,7 @@ selenium 缺乏对浏览器下载文件的有效管理,难以进行检测下 # 单线程下载方式 `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') ``` -# 多线程下载方式 +# 多线程并发下载方式 你可以往`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 @@ url:https://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' +``` + diff --git a/requirements.txt b/requirements.txt index 2c2dd13..3a9fa48 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ selenium requests tldextract lxml -cssselect \ No newline at end of file +cssselect +DownloadKit \ No newline at end of file diff --git a/setup.py b/setup.py index 30f0dc2..04a4518 100644 --- a/setup.py +++ b/setup.py @@ -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",