diff --git a/DrissionPage/chromium_driver.py b/DrissionPage/chromium_driver.py
index f5abac4..72020db 100644
--- a/DrissionPage/chromium_driver.py
+++ b/DrissionPage/chromium_driver.py
@@ -206,7 +206,7 @@ class ChromiumDriver(object):
if self._stopped.is_set():
return False
if not self._started:
- raise RuntimeError("Driver未在运行。")
+ return True
self.status = self._STOPPED_
self._stopped.set()
diff --git a/DrissionPage/configs/configs.ini b/DrissionPage/configs/configs.ini
index 9d8421c..1e30934 100644
--- a/DrissionPage/configs/configs.ini
+++ b/DrissionPage/configs/configs.ini
@@ -1,5 +1,5 @@
[paths]
-chromedriver_path =
+chromedriver_path = D:\python\projects\DrissionPage\DrissionPage\chromedriver.exe
download_path =
[chrome_options]
diff --git a/DrissionPage/configs/session_options.pyi b/DrissionPage/configs/session_options.pyi
index 628360f..00aece2 100644
--- a/DrissionPage/configs/session_options.pyi
+++ b/DrissionPage/configs/session_options.pyi
@@ -102,10 +102,10 @@ class SessionOptions(object):
@property
def max_redirects(self) -> int: ...
- def _sets(self, arg: str, val: Any) -> None: ...
-
def set_max_redirects(self, times: Union[int, None]) -> SessionOptions: ...
+ def _sets(self, arg: str, val: Any) -> None: ...
+
def save(self, path: str = None) -> str: ...
def save_to_default(self) -> str: ...
diff --git a/DrissionPage/session_page.py b/DrissionPage/session_page.py
index 3dd3215..1dfd540 100644
--- a/DrissionPage/session_page.py
+++ b/DrissionPage/session_page.py
@@ -355,6 +355,13 @@ class SessionPageSetter(object):
def __init__(self, page):
self._page = page
+ def timeout(self, second):
+ """设置连接超时时间
+ :param second: 秒数
+ :return: None
+ """
+ self._page.timeout = second
+
def cookies(self, cookies):
"""为Session对象设置cookies
:param cookies: cookies信息
@@ -363,18 +370,100 @@ class SessionPageSetter(object):
set_session_cookies(self._page.session, cookies)
def headers(self, headers):
- """设置通用的headers,设置的headers值回逐个覆盖原有的,不会清理原来的
+ """设置通用的headers
:param headers: dict形式的headers
:return: None
"""
- headers = CaseInsensitiveDict(headers)
- for i in headers:
- self._page.session.headers[i] = headers[i]
+ self._page.session.headers = CaseInsensitiveDict(headers)
+
+ def header(self, attr, value):
+ """设置headers中一个项
+ :param attr: 设置名称
+ :param value: 设置值
+ :return: None
+ """
+ self._page.session.headers[attr.lower()] = value
def user_agent(self, ua):
- """设置user agent"""
+ """设置user agent
+ :param ua: user agent
+ :return: None
+ """
self._page.session.headers['user-agent'] = ua
+ def proxies(self, http, https=None):
+ """设置proxies参数
+ :param http: http代理地址
+ :param https: https代理地址
+ :return: None
+ """
+ proxies = None if http == https is None else {'http': http, 'https': https or http}
+ self._page.session.proxies = proxies
+
+ def auth(self, auth):
+ """设置认证元组或对象
+ :param auth: 认证元组或对象
+ :return: None
+ """
+ self._page.session.auth = auth
+
+ def hooks(self, hooks):
+ """设置回调方法
+ :param hooks: 回调方法
+ :return: None
+ """
+ self._page.session.hooks = hooks
+
+ def params(self, params):
+ """设置查询参数字典
+ :param params: 查询参数字典
+ :return: None
+ """
+ self._page.session.params = params
+
+ def verify(self, on_off):
+ """设置是否验证SSL证书
+ :param on_off: 是否验证 SSL 证书
+ :return: None
+ """
+ self._page.session.verify = on_off
+
+ def cert(self, cert):
+ """SSL客户端证书文件的路径(.pem格式),或(‘cert’, ‘key’)元组
+ :param cert: 证书路径或元组
+ :return: None
+ """
+ self._page.session.cert = cert
+
+ def stream(self, on_off):
+ """设置是否使用流式响应内容
+ :param on_off: 是否使用流式响应内容
+ :return: None
+ """
+ self._page.session.stream = on_off
+
+ def trust_env(self, on_off):
+ """设置是否信任环境
+ :param on_off: 是否信任环境
+ :return: None
+ """
+ self._page.session.trust_env = on_off
+
+ def max_redirects(self, times):
+ """设置最大重定向次数
+ :param times: 最大重定向次数
+ :return: None
+ """
+ self._page.session.max_redirects = times
+
+ def add_adapter(self, url, adapter):
+ """添加适配器
+ :param url: 适配器对应url
+ :param adapter: 适配器对象
+ :return: None
+ """
+ self._page.session.mount(url, adapter)
+
class DownloadSetter(object):
"""用于设置下载参数的类"""
diff --git a/DrissionPage/session_page.pyi b/DrissionPage/session_page.pyi
index 4c6a769..b76c366 100644
--- a/DrissionPage/session_page.pyi
+++ b/DrissionPage/session_page.pyi
@@ -8,6 +8,8 @@ from typing import Any, Union, Tuple, List
from DownloadKit import DownloadKit
from requests import Session, Response
+from requests.adapters import HTTPAdapter
+from requests.auth import HTTPBasicAuth
from requests.cookies import RequestsCookieJar
from requests.structures import CaseInsensitiveDict
@@ -169,12 +171,36 @@ class SessionPageSetter(object):
def __init__(self, page: SessionPage):
self._page: SessionPage = ...
+ def timeout(self, second: Union[int, float]) -> None: ...
+
def cookies(self, cookies: Union[RequestsCookieJar, list, tuple, str, dict]) -> None: ...
def headers(self, headers: dict) -> None: ...
+ def header(self, attr: str, value: str) -> None: ...
+
def user_agent(self, ua: str) -> None: ...
+ def proxies(self, http, https=None) -> None: ...
+
+ def auth(self, auth: Union[Tuple[str, str], HTTPBasicAuth, None]) -> None: ...
+
+ def hooks(self, hooks: Union[dict, None]) -> None: ...
+
+ def params(self, params: Union[dict, None]) -> None: ...
+
+ def verify(self, on_off: Union[bool, None]) -> None: ...
+
+ def cert(self, cert: Union[str, Tuple[str, str], None]) -> None: ...
+
+ def stream(self, on_off: Union[bool, None]) -> None: ...
+
+ def trust_env(self, on_off: Union[bool, None]) -> None: ...
+
+ def max_redirects(self, times: Union[int, None]) -> None: ...
+
+ def add_adapter(self, url: str, adapter: HTTPAdapter) -> None: ...
+
class DownloadSetter(object):
def __init__(self, page: Union[SessionPage, WebPage, ChromiumPage]):
diff --git a/README.md b/README.md
index 379bfae..158318a 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
DrissionPage 是一个基于 python 的网页自动化工具。
-它既能控制浏览器,也能收发数据包,甚至能把两者合而为一,
+它既能控制浏览器,也能收发数据包,甚至能把两者合而为一。
可兼顾浏览器自动化的便利性和 requests 的高效率。
@@ -10,7 +10,15 @@ DrissionPage 是一个基于 python 的网页自动化工具。
它的语法简洁而优雅,代码量少,对新手友好。
-***
+---
+
+
+
+项目地址:[gitee](https://gitee.com/g1879/DrissionPage) | [github](https://github.com/g1879/DrissionPage)
+
+您的星星是对我最大的支持💖
+
+---
支持系统:Windows、Linux、Mac
@@ -18,17 +26,13 @@ python 版本:3.6 及以上
支持浏览器:Chromium 内核浏览器(如 Chrome 和 Edge)
-***
+---
-
-
-项目地址:[gitee](https://gitee.com/g1879/DrissionPage) | [github](https://github.com/g1879/DrissionPage)
+**📖 使用文档:** [点击查看](http://g1879.gitee.io/drissionpagedocs)
**交流QQ群:** 897838127
-**联系邮箱:** g1879@qq.com
-
-**📖 使用文档:** [点击查看](http://g1879.gitee.io/drissionpagedocs)
+---
# 📕 背景
@@ -40,10 +44,14 @@ python 版本:3.6 及以上
以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。
+---
+
# 💡 理念
简洁!易用 !方便!
+---
+
# ☀️ 特性和亮点
作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。
@@ -94,6 +102,8 @@ python 版本:3.6 及以上
- 还有很多细节,这里不一一列举,欢迎实际使用中体验:)
+---
+
# 🌟 简单演示
## ⭐ **与 selenium 代码对比**
@@ -277,19 +287,27 @@ Git 命令学习 https://oschina.gitee.io/learn-git-branching/
Git 命令学习
```
+---
+
# 🛠 使用方法
[点击跳转到使用文档](http://g1879.gitee.io/drissionpage)
+---
+
# 🔖 版本历史
-[点击查看版本历史](http://g1879.gitee.io/drissionpage/#/%E7%89%88%E6%9C%AC%E5%8E%86%E5%8F%B2)
+[点击查看版本历史](http://g1879.gitee.io/drissionpagedocs/10_history/)
+
+---
# 🖐🏻 免责声明
请勿将 DrissionPage 应用到任何可能会违反法律规定和道德约束的工作中,请友善使用 DrissionPage,遵守蜘蛛协议,不要将 DrissionPage 用于任何非法用途。如您选择使用 DrissionPage
即代表您遵守此协议,作者不承担任何由于您违反此协议带来任何的法律风险和损失,一切后果由您承担。
+---
+
# ☕ 请我喝咖啡
如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :)
diff --git a/docs/.nojekyll b/docs/.nojekyll
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/10_history.md b/docs/10_history.md
deleted file mode 100644
index b6bfdf4..0000000
--- a/docs/10_history.md
+++ /dev/null
@@ -1,434 +0,0 @@
-# v3.1.3
-
-- `ChromiumPage`添加`latest_tab`属性
-
-- `WebPage`初始化删除`tab_id`参数
-
-- 修复页面未加载完可能获取到空元素的问题
-
-- 修复新标签页重定向时获取文档不正确问题
-
-- 增强稳定性
-
-# v3.1.1
-
-- 增强下载功能
-
- - `ChromiumPage`也可以使用内置下载器下载文件
-
- - 可拦截并接管浏览器下载任务
-
- - 新增`download_set`属性对下载参数进行设置
-
- - 增加`wait_download_begin()`方法
-
-- 改进浏览器启动设置
-
- - 优化 ini 文件结构
-
- - 新增`ChromiumOptions`取代`DriverOptions`,完全摆脱对 selenium 的依赖
-
- - 新增自动分配端口功能
-
- - 优化`SessionOptions`设计,增加一系列设置参数的方法
-
- - 改进对用户配置文件的设置
-
-- 对部分代码进行重构
-
- - 优化页面对象启动逻辑
-
- - 优化配置类逻辑
-
- - 优化项目结构
-
-- 细节
-
- - 上传文件时支持传入相对路径
-
-- bug 修复
-
- - 修复`get_tab()`出错问题
-
- - 修复新浏览器第一次新建标签页时不正确切换的问题
-
- - 修复关闭当前标签页出错问题
-
- - 修复改变浏览器窗口大小出错问题
-
-# v3.0.34
-
-- `WebPage`删除`check_page()`方法
-
-- `DriverOptions`和`easy_set`的`set_paths()`增加`browser_path`参数
-
-- `DriverOptions`增加`browser_path`属性
-
-- `ChromiumFrame`现在支持页面滚动
-
-- 改进滚动到元素功能
-
-- 修改`SessionElement`相对定位参数顺序
-
-- `SessionPage`也可以从 ini 文件读取 timeout 设置
-
-- ini 文件中`session_options`增加`timeout`项
-
-- `SessionOptions`增加`timeout`属性、`set_timeout()`方法
-
-- 优化和修复一些问题
-
-# v3.0.31
-
-- `run_script()`、`run_async_script()`更名为`run_js`和`run_async_js()`
-- 返回的坐标数据全部转为`int`类型组成的`tuple`
-- 修改注释
-
-# v3.0.30
-
-- 元素增加`m_click()`方法
-- 动作链增加`type()`、`m_click()`、`r_hold()`、`r_release()`、`m_hold()`、`m_release()`方法
-- 动作链的`on_ele`参数可接收文本定位符
-- `WebPage`、`SessionPage`、`ChromiumPage`增加`set_headers()`方法
-
-# v3.0.28
-
-- 各种大小、位置信息从`dict`改为用`tuple`返回
-- 改进`ChromiumFrame`
-- 修复小窗时定位不准问题,修复 iframe 内元素无法获取 s_ele() 问题
-- 增加`wait_loading`方法和参数
-- 其它优化和问题修复
-
-# v3.0.22
-
-- `change_mode()`增加`copy_cookies`参数
-- 调整`WebPage`生成的元素对象的`prev()`、`next()`、`before()`、`after()`参数顺序
-- 修复读取页面时小概率失效问题
-- 用存根文件取代类型注解
-
-# v3.0.20
-
-重大更新。推出`WebPage`,重新开发底层逻辑,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。支持 chromium 内核的浏览器(如 chrome 和 edge)。比`MixPage`有以下优点:
-
-- 无 webdriver 特征,不会被网站识别
-- 无需为不同版本的浏览器下载不同的驱动
-- 运行速度更快
-- 可以跨 iframe 查找元素,无需切入切出
-- 把 iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰
-- 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态
-- 可以直接读取浏览器缓存来保持图片,无需用 GUI 点击保存
-- 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)
-
-其它更新:
-
-- 增加`ChromiumTab`和`ChromiumFrame`类用于处理 tab 和 frame 元素
-- 新增与`WebPage`配合的动作链接`ActionChains`
-- ini 文件和`DriverOption`删除`set_window_rect`属性
-- 浏览器启动配置实现对插件的支持
-- 浏览器启动配置实现对`experimental_options`的`prefs`属性支持
-
-# v2.7.3
-
-- 页面对象和元素对象的`screenshot_as_bytes()`方法合并到`screenshot()`
-- `input()`方法接收非文本参数时自动转成文本输入
-
-# v2.7.2
-
-- d 模式页面和元素对象增加`screenshot_as_bytes()`方法
-
-# v2.7.1
-
-- DriverPage
- - 增加`get_session_storage()`、`get_local_storage()`、`set_session_storage()`、`set_local_storage()`、`clean_cache()`方法
- - `run_cdp()`的`cmd_args`参数改为`**cmd_args`
-- 关闭 driver 时会主动关闭 chromedriver.exe 的进程
-- 优化关闭浏览器进程逻辑
-
-# v2.6.2
-
-- d 模式增加`stop_loading()`方法
-- 优化完善监听器功能
-
-# v2.6.0
-
-- 新增`Listener`类
- - 可监听浏览器数据包
- - 可异步监听
- - 可实现每监听到若干数据包执行操作
-- 放弃对selenium4.1以下的支持
-- 解决使用新版浏览器时出现的一些问题
-
-# v2.5.9
-
-- 优化 s 模式创建连接的逻辑
-
-# v2.5.7
-
-- 列表元素`select()`、`deselect()`等方法添加`timeout`参数,可等待列表元素加载
-- 优化了对消息提示框的处理
-- `drag()`和`drag_to()`不再检测是否拖拽成功,改成返回`None`
-- `DriverOptions`对象从父类继承的方法也支持链式操作
-- 其它优化和问题修复
-
-# v2.5.5
-
-- `DriverPage`添加`run_cdp()`方法
-- `get()`和`post()`方法删除`go_anyway`参数
-- 连接重试默认不打印提示
-
-# v2.5.0
-
-- 用 DownloadKit 库替代原来的`download()`方法,支持多线程并发
-- `DriverPage`增加`set_ua_to_tab()`方法
-- 删除`scroll_to()`方法
-- 其它优化和问题修复
-
-# v2.4.3
-
-- `wait_ele()`、`to_frame()`、`scroll_to()`改用类的方式,避免使用字符串方式选择功能
-- `scroll_to()`方法改为`scroll`属性
-- 滚动页面或元素增加`to_location()`方式
-- 优化`Select`类用法
-
-# v2.3.3
-
-- `DriverPage`添加`forward()`方法
-- `DriverPage`的`close_current_tab()`改为`close_tabs()`,可一次过关闭多个标签页
-- `DriverPage`添加`run_async_script()`
-- `DriverPage`添加`timeouts`属性
-- `DriverPage`添加`set_timeouts()`方法
-- `DriverElement`添加`scroll_to()`方法,可在元素内滑动滚动条
-- `DriverOptions`添加`set_page_load_strategy()`方法
-- ini 文件增加`page_load_strategy`、`set_window_rect`、`timeouts`三个属性
-- 其它优化和问题修复
-
-# v2.2.1
-
-- 新增基于页面布局的相对定位方法`left()`,`right()`,`below()`,`above()`,`near()`,`lefts()`,`rights()`,`belows()`,`aboves()`,`nears()`
-- 修改基于 DOM 的相对定位方法:删除`parents()`方法,`parent`属性改为 `parent()`方法,`next`属性 改为`next()`方法,`prev`属性改为`prev()`方法,`nexts()`和`prevs()`
- 方法改为返回多个对象
-- 增加`after()`,`before()`,`afters()`,`before()`等基于 DOM 的相对定位方法
-- 定位语法增加`@@`和`@@-`语法,用于同时匹配多个条件和排除条件
-- 改进`ShadowRootElement`功能,现在在 shadow-root 下查找元素可用完全版的定位语法。
-- `DriverElement`的`after`和`before`属性改为`pseudo_after`和`pseudo_before`
-- `DriverElement`的`input()`增加`timeout`参数
-- `DriverElement`的`clear()`增加`insure_clear`参数
-- 优化`DriverElement`的`submit()`方法
-- `DriverPage`增加`active_ele`属性,获取焦点所在元素
-- `DriverPage`的`get_style_property()`改名为`style()`
-- `DriverPage`的`hover()`增加偏移量参数
-- `DriverPage`的`current_tab_num`改名为`current_tab_index`
-- `DriverPage`的`to_frame()`方法返回页面对象自己,便于链式操作
-- 优化自动下载 driver 逻辑
-- `set_paths()`增加`local_port`参数
-- 默认使用`9222`端口启动浏览器
-- 其它优化和问题修复
-
-# v2.0.0
-
-- 支持从`DriverElement`或 html 文本生成`SessionElement`,可把 d 模式的页面信息爬取速度提高几个数量级(使用新增的`s_ele()`和`s_eles()`方法)
-- 支持随时隐藏和显示浏览器进程窗口(只支持 Windows 系统)
-- s 模式和 d 模式使用相同的提取文本逻辑,d 模式提取文本效率大增
-- `input()`能自动检测以确保输入成功
-- `click()`支持失败后不断重试,可用于确保点击成功及等待页面遮罩层消失
-- 对 linux 和 mac 系统路径问题做了修复
-- `download()`能更准确地获取文件名
-- 其它稳定性和效率上的优化
-
-# v1.11.7
-
-- `SessionOptions`增加`set_headers()`方法
-- 调整`MixPage`初始化参数
-- `click()`增加`timeout`参数,修改逻辑为在超时时间内不断重试点击。可用于监视遮罩层是否消失
-- 处理`process_alert()`增加`timeout`参数
-- 其他优化和问题修复
-
-# v1.11.0
-
-- `set_property()`方法改名为`set_prop`
-- 增加`prop()`
-- `clear()`改用 selenium 原生
-- 增加`r_click()`和`r_click_at()`
-- `input()`返回`None`
-- 增加`input_txt()`
-
-# v1.10.0
-
-- 优化启动浏览器的逻辑
-- 用 debug 模式启动时可读取启动参数
-- 完善`select`标签处理功能
-- `MixPage`类的`to_iframe()`改名为`to_frame()`
-- `MixPage`类的`scroll_to()`增加`'half'`方式,滚动半页
-- Drission 类增加`kill_browser()`方法
-
-# v1.9.0
-
-- 元素增加`click_at()`方法,支持点击偏移量
-- `download()`支持重试
-- 元素`input()`允许接收组合键,如`ctrl+a`
-- 其它优化
-
-# v1.8.0
-
-- 添加`retry_times`和`retry_interval`属性,可统一指定重连次数
-- 元素对象增加`raw_text`属性
-- 元素查找字符串支持极简模式,用`x`表示`xpath`、`c`表示`css`、`t`表示`tag`、`tx`表示`text`
-- s 模式元素`text`尽量与 d 模式保持一致
-- 其它完善和问题修复
-
-# v1.7.7
-
-- 创建`WebDriver`时可自动下载 chromedriver.exe
-- 修复获取不到`content-type`时会出现的问题
-
-# v1.7.1
-
-- d 模式如指定了调试端口,可自动启动浏览器进程并接入
-- 去除对 cssselect 库依赖
-- 提高查找元素效率
-- 调整获取元素 xpath 和 css_path 逻辑
-
-# v1.7.0
-
-- 优化`cookies`相关逻辑
-- `MixPage`增加`get_cookies()`和`set_cookies()`方法
-- 增加`SessionOptions`类
-- 浏览文件`DriverElement`增加`remove_attr()`方法
-- 修复`MixPage`初始化时`Session`导入`cookies`时的问题
-- `MixPage`的`close_other_tabs()`方法现在可以接收列表或元组以保留多个 tab
-- 其它优化
-
-# v1.6.1
-
-- 增加`.`和`#`方式用于查找元素,相当于`@Class`和`@id`
-- easy_set 增加识别 chrome 版本并自动下载匹配的 chromedriver.exe 功能
-- 改进配置功能
-- 修复 shadow-root 方面的问题
-
-# v1.5.4
-
-- 优化获取编码的逻辑
-- 修复下载不能显示进度的问题
-
-# v1.5.2
-
-- 修复获取 html 时会把元素后面的文本节点带上的问题
-- 修复获取编码可能出现的错误
-- 优化`download()`和获取编码代码
-
-# v1.5.1
-
-- 修复获取编码可能出现的 bug
-
-# v1.5.0
-
-- s 模式使用 lxml 库代替 requests_html 库
-- 可直接调用页面对象和元素对象获取下级元素,`element('@id=ele_id')`等价于`element.ele('@id=ele_id')`
-- `nexts()`、`prevs()`方法可获取文本节点
-- 可获取伪元素属性及文本
-- 元素对象增加`link`和`inner_html`属性
-- 各种优化
-
-# v1.4.0
-
-- d 模式使用 js 通过`evaluate()`方法处理 xpath,放弃使用 selenium 原生的方法,以支持用 xpath 直接获取文本节点、元素属性
-- d 模式增加支持用 xpath 获取元素文本、属性
-- 优化和修复小问题
-
-# v1.3.0
-
-- 可与 selenium 代码无缝对接
-- 下载功能支持 post 方式
-- 元素添加`texts`属性,返回元素内每个文本节点内容
-- s 模式增加支持用 xpath 获取元素文本、属性
-
-# v1.2.1
-
-- 优化修复网页编码逻辑
-- `download()`函数优化获取文件名逻辑
-- 优化`download()`获取文件大小逻辑
-- 优化`MixPage`对象关闭 session 逻辑
-
-# v1.2.0
-
-- 增加对 shadow-root 的支持
-- 增加自动重试连接功能
-- `MixPage`可直接接收配置
-- 修复一些 bug
-
-# v1.1.3
-
-- 连接有关函数增加是否抛出异常参数
-- s 模式判断编码优化
-- d 模式`check_page()`优化
-- 修复`run_script()`遗漏`args`参数的问题
-
-# v1.1.1
-
-- 删除`get_tabs_sum()`和`get_tab_num()`函数,以属性`tabs_count`和`current_tab_num`代替
-- 增加`current_tab_handle`、`tab_handles`属性
-- `to_tab()`和`close_other_tabs()`函数可接收`handle`值
-- `create_tab()`可接收一个 url 在新标签页打开
-- 其它优化和 bug 修复
-
-# v1.1.0
-
-- 元素对象增加 xpath 和 css path 路径属性
-- 修复 driver 模式下元素对象用 css 方式不能获取直接子元素的问题(selenium 的锅)
-- s 模式下现在能通过 xpath 定位上级元素
-- 优化 d 模式兄弟元素、父级元素的获取效率
-- 优化标签页处理功能
-- 其它小优化和修复
-
-# V1.0.5
-
-- 修复切换模式时 url 出错的 bug
-
-# V1.0.3
-
-- `DriverOptions`支持链式操作
-- `download()`函数增加参数处理遇到已存在同名文件的情况,可选跳过、覆盖、自动重命名
-- `download()`函数重命名调整为只需输入文件名,不带后缀名,输入带后缀名也可自动识别
-
-# V1.0.1
-
-- 增强拖拽功能和 chrome 设置功能
-
-# V0.14.0
-
-- `Drission`类增加代理设置和修改
-
-# V0.12.4
-
-- `click()`的`by_js`可接收`False`
-- 修复一些 bug
-
-# V0.12.0
-
-- 增加`tag:tagName@arg=val`查找元素方式
-- `MixPage`增加简易方式创建对象方式
-
-# V0.11.0
-
-- 完善`easy_set`的函数
-- 元素增加多级定位函数
-
-# v0.10.2
-
-- 完善`attr`及`attrs`功能
-
-# v0.10.1
-
-- 增加`set_headless()`以及`to_iframe()`兼容全部原生参数
-
-# v0.9.4
-
-- 修复 bug
-
-# v0.9.0
-
-- 增加了元素拖拽和处理提示框功能
-
-# v0.8.4
-
-- 基本完成
diff --git a/docs/2_features/1_intimate_design.md b/docs/2_features/1_intimate_design.md
deleted file mode 100644
index 81cb98f..0000000
--- a/docs/2_features/1_intimate_design.md
+++ /dev/null
@@ -1,112 +0,0 @@
-这里介绍一些本库内置了人性化设计。
-
-# ✔️ 无处不在的等待
-
-网络环境不稳定,很多时候程序须要稍微等待一下才能继续运行。等待太少,会导致程序出错,等待太多,又会浪费时间。为了解决这些问题,本库在大量须要等待的部分内置了超时功能,并且可以随时灵活设置,大幅降低程序复杂性。
-
-- 查找元素内置等待。可以为每次查找元素单独设定等待时间。有些页面会不定期出现提示信息,如果一律等待会太浪费时间,可以独立设置一个很短的超时时间,避免浪费。
-
-- 等待下拉列表选项。很多下拉列表使用 js 加载,本库选择下拉列表时,会自动等待列表项出现。
-
-- 等待弹窗。有时预期的 alert 未必立刻出现,本库处理 弹窗消息时也可以设置等待。
-
-- 等待元素状态改变。使用`wait_ele()`方法可等待元素出现、消失、删除等状态。
-
-- 点击功能也内置等待,如遇元素被遮挡可不断重试点击。
-
-- 设置页面加载时限及加载策略。有时不需要完整加载页面资源,可根据实际须要设置加载策略。
-
----
-
-# ✔️ 自动重试连接
-
-在访问网站时,由于网络不稳定可能导致连接异常。本库设置了连接自动重试功能,当网页连接异常,会默认重试 3 次。当然也可以手动设置次数和间隔。
-
-```python
-page.get('xxxxxx', retry=5, interval=3) # 出错是重试 5 次,每次间隔 3 秒
-```
-
----
-
-# ✔️ 极简的定位语法
-
-本库制定了一套简洁高效的查找元素语法,支持链式操作,支持相对定位。与 selenium 繁琐的语法相比简直不要太方便。
-
-而且每次查找内置等待,可以独立设置每次查找超时时间。
-
-同是设置了超时等待的查找,对比一下:
-
-```python
-# 使用 selenium:
-element = WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.XPATH, '//*[contains(text(), "some text")]')))
-
-# 使用 DrissionPage:
-element = page('some text', timeout=10)
-```
-
----
-
-# ✔️ 无需切入切出,逻辑清晰
-
-使用过 selenium 的人都知道,selenium 同一时间只能操作一个标签页或`