diff --git a/README.md b/README.md
index 331481f..ab6f617 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,14 @@
-# ✨️简洁!易用 !方便!✨️
+#
-DrissionPage,即 driver 和 session 组合而成的 page。
-是个基于 python 的 Web 自动化操作集成工具。
-它用 POM 模式封装了页面和元素常用的方法,
-自带一套简洁直观优雅的元素定位语法,
-实现了浏览器和 requests 之间的无缝切换,
-可兼顾浏览器自动化的便利性和 requests 的高效率,
-更棒的是,它的使用方式非常简洁和人性化,代码量少,对新手友好。
+DrissionPage 是一个基于 python 的网页自动化工具。
+
+它既能控制浏览器,也能收发数据包,甚至能把两者合而为一,
+
+可兼顾浏览器自动化的便利性和 requests 的高效率。
+
+它功能强大,内置无数人性化设计和便捷功能。
+
+它的语法简洁而优雅,代码量少,对新手友好。
**使用文档:** 📒[点击打开](http://g1879.gitee.io/drissionpage)
@@ -14,17 +16,26 @@ DrissionPage,即 driver 和 session 组合而成的 page。
**联系邮箱:** g1879@qq.com
-## 📕 背景
+# 📕 背景
-用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,体验不好,开发效率不高。
-使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。因此,这个库将它们合而为一,不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。
+用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,体验不好,开发效率不高。
+使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。
+
+因此,这个库设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。
除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。
一切从简,尽量提供简单直接的使用方法,对新手更友好。
-# 🔆 3.0 版隆重推出
+# 💡 理念
-以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。
-3.0 全新开发的页面对象是`WebPage`,支持 chromium 内核的浏览器(如 chrome 和 edge)。除了保持之前的功能,比依赖 selenium 的`MixPage`有以下优点:
+简洁!易用 !方便!
+
+# ☀️ 特性和亮点
+
+作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。
+
+## 🎇 强大的自研内核
+
+本库采用全自研的内核,内置了 N 多实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点:
- 无 webdriver 特征,不会被网站识别
@@ -36,64 +47,34 @@ DrissionPage,即 driver 和 session 组合而成的 page。
- 把 iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰
-- 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态
+- 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换
-- 可以直接读取浏览器缓存来保存图片,无需用 GUI 点击保存
+- 可以直接读取浏览器缓存来保存图片,无需用 GUI 点击另存
- 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)
-- 对 Linux 提供良好支持
-
-新版是自己实现的功能,开发不会受太多限制,以后将主要对`WebPage`进行更新。
-
-3.0 版已经发布,目前正在测试,欢迎试用并提出意见,让我做得更好。
-
-# 💡 特性和亮点
-
-作者踩过无数坑,总结出的经验全写到这个库里了。内置了 N 多实用功能,对常用功能作了整合和优化。
-
-## 🎉 特性
-
-- 代码高度集成,以简洁的代码为第一追求。
-- 页面对象可在浏览器和 requests 间任意切换,保留登录状态。
-- 极简单但强大的元素定位语法,支持链式操作,代码极其简洁。
-- 两种模式提供一致的 API,使用体验一致。
-- 人性化设计,集成众多实用功能,大大降低开发工作量。
-
## 🎇 亮点功能
-- 每次运行程序可以反复使用已经打开的浏览器。如手动设置网页到某个状态,再用程序接管,或手动处理登录,再用程序爬内容。无须每次运行从头启动浏览器,超级方便。
-- 使用 ini 文件保存常用配置,自动调用,也提供便捷的设置 API,远离繁杂的配置项。
-- 极致简明的定位语法,支持直接按文本定位元素,支持直接获取前后兄弟元素和父元素等。
-- 强大的下载工具,操作浏览器时也能享受快捷可靠的下载功能。
-- 下载工具支持多种方式处理文件名冲突、自动创建目标路径、断链重试等。
-- 访问网址带自动重试功能,可设置间隔和超时时间。
-- 访问网页能自动识别编码,无须手动设置。
-- 链接参数默认自动生成`Host`和`Referer`属性。
-- 可随时直接隐藏或显示浏览器进程窗口,非 headless 或最小化。
-- 可自动下载合适版本的 chromedriver,免去麻烦的配置。
-- d 模式查找元素内置等待,可任意设置全局等待时间或单次查找等待时间。
-- 点击元素集成 js 点击方式,一个参数即可切换点击方式。
-- 点击支持失败重试,可用于保证点击成功、判读网页遮罩层是否消失等。
-- 输入文本能自动判断是否成功并重试,避免某些情况下输入或清空失效的情况。
-- d 模式下支持全功能的 xpath,可直接获取元素的某个属性,selenium 原生无此功能。
-- 支持直接获取`shadow-root`,和普通元素一样操作其下的元素。
-- 支持直接获取`after`和`before`伪元素的内容。
-- 可以在元素下直接使用 > 以 css selector 方式获取当前元素直接子元素。原生不支持这种写法。
-- 可简单地使用 lxml 来解析 d 模式的页面或元素,爬取复杂页面数据时速度大幅提高。
-- 输出的数据均已转码及处理基本排版,减少重复劳动。
-- 可方便地与 selenium 或 requests 原生代码对接,便于项目迁移。
-- 使用 POM 模式封装,可直接用于测试,便于扩展。
-- d 模式配置可同时兼容`debugger_address`和其它参数,原生不能兼容。
-- 还有很多这里不一一列举…………
+除了以上优点,本库还内置了无数人性化设计。
-# 🍀 简单演示
+- 极简的语法规则。集成大量常用功能,代码更优雅
+- 定位元素更加容易,功能更强大稳定
+- 无处不在的等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心
+- 提供强大的下载工具。操作浏览器时也能享受快捷可靠的下载功能
+- 允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便
+- 使用 ini 文件保存常用配置,自动调用,提供便捷的设置,远离繁杂的配置项
+- 内置 lxml 作为解析引擎,解析速度成几个数量级提升
+- 使用 POM 模式封装,可直接用于测试,便于扩展
+- 高度集成的便利功能,从每个细节中体现
+- 还有很多细节,这里不一一列举,欢迎实际使用中体验:)
-☘️ **与 selenium 代码对比**
+# 🌟 简单演示
+
+## ⭐ **与 selenium 代码对比**
以下代码实现一模一样的功能,对比两者的代码量:
-🌿 用显性等待方式定位第一个文本包含`some text`的元素
+✨️ 用显性等待方式定位第一个文本包含`some text`的元素
```python
# 使用 selenium:
@@ -103,17 +84,17 @@ element = WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH,
element = page('some text')
```
-🌿 跳转到第一个标签页
+✨️ 跳转到第一个标签页
```python
# 使用 selenium:
driver.switch_to.window(driver.window_handles[0])
# 使用 DrissionPage:
-page.to_tab(0)
+page.to_tab(page.tabs[0])
```
-🌿 按文本选择下拉列表
+✨️ 按文本选择下拉列表
```python
# 使用 selenium:
@@ -126,7 +107,7 @@ select_element.select_by_visible_text('text')
element.select('text')
```
-🌿 拖拽一个元素
+✨️ 拖拽一个元素
```python
# 使用 selenium:
@@ -136,7 +117,7 @@ ActionChains(driver).drag_and_drop(ele1, ele2).perform()
ele1.drag_to(ele2)
```
-🌿 滚动窗口到底部(保持水平滚动条不变)
+✨️ 滚动窗口到底部(保持水平滚动条不变)
```python
# 使用 selenium:
@@ -146,18 +127,7 @@ driver.execute_script("window.scrollTo(document.documentElement.scrollLeft, docu
page.scroll.to_bottom()
```
-🌿 设置 headless 模式
-
-```python
-# 使用 selenium:
-options = webdriver.ChromeOptions()
-options.add_argument("--headless")
-
-# 使用 DrissionPage:
-set_headless()
-```
-
-🌿 获取伪元素内容
+✨️ 获取伪元素内容
```python
# 使用 selenium:
@@ -168,9 +138,7 @@ text = webdriver.execute_script('return window.getComputedStyle(arguments[0], ":
text = element.pseudo_after
```
-🌿 shadow-root 操作
-
-selenium 新增了`ShadowRoot`,但功能实在是太少。
+✨️ shadow-root 操作
```python
# 使用 selenium:
@@ -184,17 +152,7 @@ ele = shadow_element.ele('tag:div')
ele.click()
```
-🌿 用 xpath 直接获取属性或文本节点(返回文本)
-
-```python
-# 使用 selenium 无此功能
-
-# 使用 DrissionPage:
-class_name = element('xpath://div[@id="div_id"]/@class')
-text = element('xpath://div[@id="div_id"]/text()[2]')
-```
-
-🌿 随时让浏览器窗口消失和显示
+✨️ 随时让浏览器窗口消失和显示(Windows系统)
```python
# selenium 无此功能
@@ -204,13 +162,11 @@ page.hide_browser() # 让浏览器窗口消失
page.show_browser() # 重新显示浏览器窗口
```
-注:本功能只支持 Windows。
-
-☘️ **与 requests 代码对比**
+## ⭐ **与 requests 代码对比**
以下代码实现一模一样的功能,对比两者的代码量:
-🌿 获取元素内容
+✨️ 获取元素内容
```python
url = 'https://baike.baidu.com/item/python'
@@ -218,22 +174,21 @@ url = 'https://baike.baidu.com/item/python'
# 使用 requests:
from lxml import etree
-headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
+headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
element = html.xpath('//h1')[0]
title = element.text
# 使用 DrissionPage:
-page = MixPage('s')
+page = WebPage('s')
page.get(url)
title = page('tag:h1').text
```
Tips: DrissionPage 自带默认`headers`
-🌿 下载文件
+✨️ 下载文件
```python
url = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
@@ -249,9 +204,9 @@ with open(f'{save_path}\\img.png', 'wb') as fd:
page.download(url, save_path, 'img') # 支持重命名,处理文件名冲突,自动创建目标文件夹
```
-☘️ **模式切换**
+## ⭐ **模式切换**
-用 selenium 登录网站,然后切换到 requests 读取网页。两者会共享登录信息。
+用浏览器登录网站,然后切换到 requests 读取网页。两者会共享登录信息。
```python
page = WebPage() # 创建页面对象,默认 driver 模式
@@ -300,7 +255,7 @@ Git 命令学习
[点击跳转到使用文档](http://g1879.gitee.io/drissionpage)
-# 🎯️ 版本历史
+# 🔖 版本历史
[点击查看版本历史](http://g1879.gitee.io/drissionpage/#/%E7%89%88%E6%9C%AC%E5%8E%86%E5%8F%B2)
diff --git a/docs/README.md b/docs/README.md
index d9b6181..608c3da 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -21,11 +21,11 @@ DrissionPage 是一个基于 python 的网页自动化工具。
除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。
一切从简,尽量提供简单直接的使用方法,对新手更友好。
-# ✨️ 理念
+# 💡 理念
简洁!易用 !方便!
-# 💡 特性和亮点
+# ☀️ 特性
作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。
diff --git a/docs/WebPage使用方法/3.0概述.md b/docs/WebPage使用方法/3.0简介.md
similarity index 100%
rename from docs/WebPage使用方法/3.0概述.md
rename to docs/WebPage使用方法/3.0简介.md
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index da1e201..a6b2ba9 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -1,66 +1,74 @@
-* [⭐️ 1 概述](README.md)
+* [📣 1 概述](README.md)
+
+* [☀️ 2 特性和亮点](#)
+
+ * [💖 2.1 贴心设计](特性和亮点\贴心设计.md)
+ * [🌟 2.2 特性演示](#)
+ * [⭐ 与 requests 对比](特性和亮点\特性演示\与requests代码对比.md)
+ * [⭐ 与 selenium 对比](特性和亮点\特性演示\与selenium代码对比.md)
+ * [⭐ 模式切换](特性和亮点\特性演示\模式切换.md)
+ * [⭐ 获取并打印元素属性](特性和亮点\特性演示\获取并打印元素属性.md)
+ * [⭐ 下载文件](特性和亮点\特性演示\下载文件.md)
* [🧭 2 入门指南](#)
-
- * [🔥 2.1 基本概念](入门指南\基本概念.md)
- * [👍 2.2 快速上手](入门指南\快速上手.md)
- * [🍀 2.3 特性演示](#)
- * [🌿 与 requests 对比](入门指南\特性演示\与requests代码对比.md)
- * [🌿 与 selenium 对比](入门指南\特性演示\与selenium代码对比.md)
- * [🌿 模式切换](入门指南\特性演示\模式切换.md)
- * [🌿 获取并打印元素属性](入门指南\特性演示\获取并打印元素属性.md)
- * [🌿 下载文件](入门指南\特性演示\下载文件.md)
- * [💖 2.4 贴心设计](入门指南\贴心设计.md)
-* [🛠 3 WebPage 使用方法](#)
-
- * [🔨 3.0 简介](WebPage使用方法\3.0概述.md)
- * [🔨 3.1 创建页面对象](WebPage使用方法\3.1创建页面对象.md)
- * [🔨 3.2 访问网页](WebPage使用方法\3.2访问网页.md)
- * [🔨 3.3 查找元素](WebPage使用方法\3.3查找元素.md)
- * [🔨 3.4 获取元素信息](WebPage使用方法\3.4获取元素信息.md)
- * [🔨 3.5 元素操作](WebPage使用方法\3.5元素操作.md)
- * [🔨 3.6 获取网页信息](WebPage使用方法\3.6获取网页信息.md)
- * [🔨 3.7 页面操作](WebPage使用方法\3.7页面操作.md)
- * [🔨 3.8 标签页操作](WebPage使用方法\3.8标签页操作.md)
- * [🔨 3.9 iframe操作](WebPage使用方法\3.9iframe操作.md)
- * [🔨 3.10 动作链](WebPage使用方法\3.10动作链.md)
+ * [🌏 2.1 基本概念](入门指南\基本概念.md)
+ * [🌏 2.2 安装和导入](入门指南\安装和导入.md)
+ * [🌏 2.3 准备工作](入门指南\准备工作.md)
+ * [🌏 2.4 上手示例](#)
+ * [🌐 控制浏览器](入门指南\上手示例\控制浏览器.md)
+ * [🌐 收发数据包](入门指南\上手示例\收发数据包.md)
+ * [🌐 模式切换](入门指南\上手示例\模式切换.md)
-* [🛠 4 MixPage 使用方法](#)
-
- * [🔨 4.1 创建页面对象](MixPage使用方法\创建页面对象.md)
- * [🔨 4.2 访问网页](MixPage使用方法\访问网页.md)
- * [🔨 4.3 查找页面元素](MixPage使用方法\查找页面元素.md)
- * [🔨 4.4 获取元素信息](MixPage使用方法\获取元素信息.md)
- * [🔨 4.5 元素操作](MixPage使用方法\元素操作.md)
- * [🔨 4.6 获取网页信息](MixPage使用方法\获取网页信息.md)
- * [🔨 4.7 页面操作](MixPage使用方法\页面操作.md)
- * [🔨 4.8 cookies 的使用](MixPage使用方法\cookies的使用.md)
- * [🔨 4.9 Drission 对象](MixPage使用方法\Drission对象.md)
- * [🔨 4.10 对接 selenium 及 requests 代码](MixPage使用方法\对接selenium及requests代码.md)
- * [🔨 4.11 使用其它系统或浏览器](MixPage使用方法\使用其它系统或浏览器.md)
- * [🔨 4.12 DriverPage 和 SessionPage](MixPage使用方法\DriverPage和SessionPage.md)
+* [🛠 3 使用方法](#)
-* [📝 5 启动配置](#)
-
- * [🗒️ 5.1 概述](启动配置\概述.md)
- * [🗒️ 5.2 浏览器启动配置](启动配置\浏览器启动配置.md)
- * [🗒️ 5.3 Session 启动配置](启动配置\Session启动配置.md)
- * [🗒️ 5.4 使用配置文件](启动配置\使用配置文件.md)
+ * [🔨 3.0 简介](WebPage使用方法\3.0简介.md)
+ * [🔨 3.1 创建页面对象](WebPage使用方法\3.1创建页面对象.md)
+ * [🔨 3.2 访问网页](WebPage使用方法\3.2访问网页.md)
+ * [🔨 3.3 查找元素](WebPage使用方法\3.3查找元素.md)
+ * [🔨 3.4 获取元素信息](WebPage使用方法\3.4获取元素信息.md)
+ * [🔨 3.5 元素操作](WebPage使用方法\3.5元素操作.md)
+ * [🔨 3.6 获取网页信息](WebPage使用方法\3.6获取网页信息.md)
+ * [🔨 3.7 页面操作](WebPage使用方法\3.7页面操作.md)
+ * [🔨 3.8 标签页操作](WebPage使用方法\3.8标签页操作.md)
+ * [🔨 3.9 iframe操作](WebPage使用方法\3.9iframe操作.md)
+ * [🔨 3.10 动作链](WebPage使用方法\3.10动作链.md)
-* [🧰 6 进阶使用](#)
-
- * [⚙️ 6.1 打包程序](进阶使用\打包程序.md)
- * [⚙️ 6.2 监听浏览器网络](进阶使用\监听浏览器网络.md)
- * [⚙️ 6.3 下载文件](进阶使用\下载文件.md)
+* [📝 4 启动配置](#)
+
+ * [🗒️ 4.1 概述](启动配置\概述.md)
+ * [🗒️ 4.2 浏览器启动配置](启动配置\浏览器启动配置.md)
+ * [🗒️ 4.3 Session 启动配置](启动配置\Session启动配置.md)
+ * [🗒️ 4.4 使用配置文件](启动配置\使用配置文件.md)
+
+* [🧰 5 进阶使用](#)
+
+ * [⚙️ 5.1 打包程序](进阶使用\打包程序.md)
+ * [⚙️ 5.2 监听浏览器网络](进阶使用\监听浏览器网络.md)
+ * [⚙️ 5.3 下载文件](进阶使用\下载文件.md)
+
+* [🛠 6 旧版使用方法](#)
+
+ * [🔨 6.1 创建页面对象](MixPage使用方法\创建页面对象.md)
+ * [🔨 6.2 访问网页](MixPage使用方法\访问网页.md)
+ * [🔨 6.3 查找页面元素](MixPage使用方法\查找页面元素.md)
+ * [🔨 6.4 获取元素信息](MixPage使用方法\获取元素信息.md)
+ * [🔨 6.5 元素操作](MixPage使用方法\元素操作.md)
+ * [🔨 6.6 获取网页信息](MixPage使用方法\获取网页信息.md)
+ * [🔨 6.7 页面操作](MixPage使用方法\页面操作.md)
+ * [🔨 6.8 cookies 的使用](MixPage使用方法\cookies的使用.md)
+ * [🔨 6.9 Drission 对象](MixPage使用方法\Drission对象.md)
+ * [🔨 6.10 对接 selenium 及 requests 代码](MixPage使用方法\对接selenium及requests代码.md)
+ * [🔨 6.11 使用其它系统或浏览器](MixPage使用方法\使用其它系统或浏览器.md)
+ * [🔨 6.12 DriverPage 和 SessionPage](MixPage使用方法\DriverPage和SessionPage.md)
* [⚡️ 7 示例和技巧](#)
-
- * [🌠 自动登录码云](示例和技巧\自动登录码云.md)
- * [🌠 采集猫眼电影TOP100榜](示例和技巧\采集猫眼电影TOP100榜.md)
- * [🌠 下载星巴克产品图片](示例和技巧\下载星巴克产品图片.md)
- * [🌠 下载豆瓣图书封面图片](示例和技巧\下载豆瓣图书封面图片.md)
- * [🌠 多线程操作多标签页](示例和技巧\多线程操作多标签页.md)
+
+ * [🌠 自动登录码云](示例和技巧\自动登录码云.md)
+ * [🌠 采集猫眼电影TOP100榜](示例和技巧\采集猫眼电影TOP100榜.md)
+ * [🌠 下载星巴克产品图片](示例和技巧\下载星巴克产品图片.md)
+ * [🌠 下载豆瓣图书封面图片](示例和技巧\下载豆瓣图书封面图片.md)
+ * [🌠 多线程操作多标签页](示例和技巧\多线程操作多标签页.md)
* [🔖 9 版本历史](版本历史.md)
diff --git a/docs/入门指南/上手示例/gitee_1.jpg b/docs/入门指南/上手示例/gitee_1.jpg
new file mode 100644
index 0000000..8b11878
Binary files /dev/null and b/docs/入门指南/上手示例/gitee_1.jpg differ
diff --git a/docs/入门指南/上手示例/gitee_2.jpg b/docs/入门指南/上手示例/gitee_2.jpg
new file mode 100644
index 0000000..69c11ed
Binary files /dev/null and b/docs/入门指南/上手示例/gitee_2.jpg differ
diff --git a/docs/入门指南/上手示例/控制浏览器.md b/docs/入门指南/上手示例/控制浏览器.md
new file mode 100644
index 0000000..af1d91d
--- /dev/null
+++ b/docs/入门指南/上手示例/控制浏览器.md
@@ -0,0 +1,89 @@
+现在,我们通过一些例子,来直观感受一下 DrissionPage 的工作方式。
+
+本示例演示使用`ChromiumPage`控制浏览器登录 gitee 网站。
+
+# ✔️ 页面分析
+
+网址:[https://gitee.com/login](https://gitee.com/login)
+
+打开网址,按`F12`,我们可以看到页面元素如下:
+
+
+
+用户名输入框`id`为`'user_login'`,密码输入框`id`为`'user_password'`,登录按钮`value`为`'登 录'`。
+
+我们可以用这三个属性定位这三个元素,然后对其输入数据和点击。
+
+# ✔️ 示例代码
+
+您可以把以下代码复制到编辑器,把账号和密码改为您自己的,可直接执行看到运行结果。
+
+```python
+from DrissionPage import ChromiumPage
+
+# 创建页面对象,并启动或接管浏览器
+page = ChroiumPage()
+# 跳转到登录页面
+page.get('https://gitee.com/login')
+
+# 定位到账号文本框,获取文本框元素
+ele = page.ele('#user_login')
+# 输入对文本框输入账号
+ele.input('你的账号')
+# 定位到密码文本框并输入密码
+page.ele('#user_password').input('你的密码')
+# 点击登录按钮
+page.ele('@value=登 录').click()
+```
+
+# ✔️ 示例详解
+
+首先,我们导入用于控制浏览器的类`ChromiumPage`。
+
+```python
+from DrissionPage import ChromiumPage
+```
+
+接下来,我们创建一个`ChromiumPage`对象。
+
+```python
+page = ChromiumPage()
+```
+
+`get()`方法用于访问参数中的网址。它会等待页面完全加载,再继续执行后面的代码。您也可以修改等待策略,如等待 DOM 加载而不等待资源下载,就停止加载,这将在后面的章节说明。
+
+```python
+page.get('https://gitee.com/login')
+```
+
+`ele()`方法用于查找元素,它返回一个`ChromiumElement`元素对象,可用于对元素的操作。
+
+`'#user_login'`是定位符文本,`#`意思是按`id`属性查找元素。
+
+值得一提的是,`ele()`内置了等待,如果元素未加载,它会执行等待,直到元素出现或到达时限。默认超时时间 10 秒。
+
+```python
+ele = page.ele('#user_login')
+```
+
+`input()`方法用于对元素输入文本。
+
+```python
+ele.input('你的账号')
+```
+
+我们也可以进行链式操作。
+
+```python
+page.ele('#user_password').input('你的密码')
+```
+
+输入账号密码后,以相同的方法获取按钮元素,并对其执行点击操作。
+
+不同的是,这次通过其`value`属性作为查找条件。`@`表示按属性名查找。
+
+```python
+page.ele('@value=登 录').click()
+```
+
+到这里,我们已完成了自动登录 gitee 网站的操作。
diff --git a/docs/入门指南/上手示例/收发数据包.md b/docs/入门指南/上手示例/收发数据包.md
new file mode 100644
index 0000000..9d49219
--- /dev/null
+++ b/docs/入门指南/上手示例/收发数据包.md
@@ -0,0 +1,90 @@
+本示例演示用`SessionPage`已收发数据包的方式采集 gitee 网站数据。
+
+本示例不使用浏览器。
+
+# ✔️ 页面分析
+
+网址:[https://gitee.com/explore/all](https://gitee.com/explore/all)
+
+这个示例的目标,要获取所有库的名称和链接,为避免对网站造成压力,我们只采集 3 页。
+
+打开网址,按`F12`,我们可以看到页面元素如下:
+
+
+
+从 html 代码中可以看到,所有开源项目的标题都是`class`属性为`'title project-namespace-path'`的``元素。我们可以遍历这些``元素,获取它们的信息。
+
+同时,我们观察到,列表页网址是以页数为参数访问的,如第一页 url 为`https://gitee.com/explore/all?page=1`,页数就是`page`参数。因此我们可以通过修改这个参数访问不同的页面。
+
+# ✔️ 示例代码
+
+以下代码可直接运行并查看结果:
+
+```python
+from DrissionPage import SessionPage
+
+# 创建页面对象
+page = SessionPage()
+
+# 爬取3页
+for i in range(1, 4):
+ # 访问某一页的网页
+ p.get(f'https://gitee.com/explore/all?page={i}')
+ # 获取所有开源库元素列表
+ links = p.eles('.title project-namespace-path')
+ # 遍历所有元素
+ for link in links:
+ # 打印链接信息
+ print(link.text, link.link)
+```
+
+输出:
+
+```
+小熊派开源社区/BearPi-HM_Nano https://gitee.com/bearpi/bearpi-hm_nano
+明月心/PaddleSegSharp https://gitee.com/raoyutian/PaddleSegSharp
+RockChin/QChatGPT https://gitee.com/RockChin/QChatGPT
+TopIAM/eiam https://gitee.com/topiam/eiam
+
+以下省略。。。
+```
+
+# ✔️ 示例详解
+
+首先,我们导入用于收发数据包的类`SessionPage`。
+
+```python
+from DrissionPage import SessionPage
+```
+
+接下来,我们创建一个`SessionPage`对象。
+
+```python
+page = SessionPage()
+```
+
+然后我们循环 3 次,以构造每页的 url,每次都用`get()`方法访问该页网址。
+
+```python
+for i in ranage(1, 4):
+ p.get(f'https://gitee.com/explore/all?page={i}')
+```
+
+访问网址后,我们用页面对象的`eles()`获取页面中所有`class`属性为`'title project-namespace-path'`的元素对象。
+
+`eles()`方法用于查找多个符合条件的元素,返回由它们组成的`list`。
+
+这里查找的条件是`class`属性,`.`表示按`class`属性查找元素。
+
+```python
+links = p.eles('.title project-namespace-path')
+```
+
+最后,我们遍历获取到的元素列表,获取每个元素的属性并打印出来。
+
+`.text`获取元素的文本,`.link`获取元素的`href`或`src`属性。
+
+```python
+for link in links:
+print(link.text, link.link)
+```
diff --git a/docs/入门指南/上手示例/模式切换.md b/docs/入门指南/上手示例/模式切换.md
new file mode 100644
index 0000000..d3aced8
--- /dev/null
+++ b/docs/入门指南/上手示例/模式切换.md
@@ -0,0 +1 @@
+# 施工中。。。
diff --git a/docs/入门指南/准备工作.md b/docs/入门指南/准备工作.md
new file mode 100644
index 0000000..4c4356b
--- /dev/null
+++ b/docs/入门指南/准备工作.md
@@ -0,0 +1,43 @@
+在开始之前,我们先进行一些简单设置。
+
+如果只使用收发数据包功能,无须任何准备工作。
+
+如果要控制浏览器,须设置浏览器路径。以下用 Chrome 作为演示。其它 Chromium 内核浏览器设置方法是一样的。
+
+# ✔️ 执行步骤
+
+## 📍 关闭已打开的 Chrome
+
+多个 Chrome 会造成冲突,如果已有打开的 Chrome 浏览器,请关闭。
+
+后面在"创建页面对象"章节再介绍多 Chrome 浏览器共存的方法。
+
+## 📍 尝试启动浏览器
+
+执行以下代码,如果正常启动了浏览器并且访问了百度,则可跳过后面的步骤。
+
+```python
+from DrissionPage import ChromiumPage
+
+page = ChromiumPage()
+page.get('https://www.baidu.com')
+```
+
+## 📍 设置路径
+
+如果上面的步骤成功访问了百度,可跳过本条。
+如果提示出错,请新建一个临时 py 文件,并输入以下代码,填入您电脑里的 Chrome 浏览器 exe 文件路径,然后执行。
+
+!>**注意:**
这段代码只要运行一次即可,不要写到正式程序里。
+
+```python
+from DrissionPage.easy_set import set_paths
+
+set_paths(chrome_path=r'这里修改为您的Chrome浏览器exe文件路径', check_version=False)
+```
+
+执行这段代码会记录您电脑的 Chrome 浏览器路径到配置文件。现在,请重新执行上一步的代码,如果正确访问了百度,说明已经设置完成。
+
+# ✔️ 说明
+
+当您完成准备工作后,无须关闭浏览器,后面的上手示例可继续使用当前浏览器。
diff --git a/docs/入门指南/安装和导入.md b/docs/入门指南/安装和导入.md
new file mode 100644
index 0000000..fc7c4d4
--- /dev/null
+++ b/docs/入门指南/安装和导入.md
@@ -0,0 +1,42 @@
+# ✔️ 安装
+
+## 📍 安装
+
+请使用 pip 安装 DrissionPage:
+
+```shell
+pip install DrissionPage
+```
+
+## 📍 升级
+
+```shell
+pip install DrissionPage --upgrade
+```
+
+# ✔️ 导入
+
+`WebPage`是功能最全面的页面类,既可控制浏览器,也可收发数据包。通常程序从导入它开始。
+
+```python
+from DrissionPage import WebPage
+```
+
+也可以根据具体需要,导入相应的类:
+
+```python
+# ChromiumPage 只控制浏览器,不能收发数据包
+from DrissionPage import ChromiumPage
+
+# SessionPage 只用于收发数据包,不能控制浏览器
+from DrissionPage import SessionPage
+
+# 浏览启动参数管理器,用于控制浏览器启动参数
+from DrissionPage import DriverOptions
+
+# Session对象启动参数管理器,用于控制Session对象启动参数
+from DrissionPage import SessionOptions
+
+# 动作链类,用于模拟一连串鼠标键盘动作
+from DrissionPage import ActionChains
+```
diff --git a/docs/入门指南/快速上手.md b/docs/入门指南/快速上手.md
deleted file mode 100644
index 97bde19..0000000
--- a/docs/入门指南/快速上手.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# ✔️ 安装
-
-```shell
-pip install DrissionPage
-```
-
-升级:
-
-```shell
-pip install DrissionPage --upgrade
-```
-
-# ✔️ 导入
-
-根据实际须要导入相应对象:
-
-```python
-from DrissionPage import WebPage # 集成两种模式,推荐使用
-from DrissionPage import MixPage # 集成两种模式,基于selenium
-from DrissionPage import ChromiumPage # 只控制浏览器,无须切换s模式
-from DrissionPage import SessionPage # 只收发数据包,无须使用浏览器
-from DrissionPage import DriverOptions # 浏览启动参数管理器
-from DrissionPage import SessionOptions # Session对象启动参数管理器
-```
-
-# ✔️ 第一次使用
-
-如果只使用 s 模式是无须初始化的,导入后就可以直接使用。
-如果使用 d 模式,`WebPage`须指定浏览器执行文件路径。`MixPage`还须下载与浏览器版本匹配的 driver 文件。这里只介绍`WebPage`需要的设置。
-
-多数情况下,如果系统内安装了 Chrome 浏览器,或在系统路径中指定了 Chrome 执行文件,DrissionPage 运行时会自动从系统路径和注册表(Windows)中寻找路径,可直接运行,无须设置。
-
-如果程序没有找到路径,或需要手动设置,可使用以下方法:
-
-新建一个**临时文件** ,修改并运行以下代码,作用是手动指定 Chrome 路径,记录到配置文件,以后程序会自动读取其中的配置,无须再写。
-
-```python
-from DrissionPage.easy_set import set_paths
-
-# 请将以下路径修改为本机实际路径
-set_paths(chrome_path=r"D:\chrome\chrome.exe") # 浏览器执行文件路径
-```
-
-!> **注意:**
这段代码只用于设置配置文件中的路径信息,**运行一次即可**,勿写到正式程序里 。
-
-除了把配置信息写在配置文件,还能把信息直接写在代码里,后面章节再详细叙述。
-
-# ✔️ 上手示例
-
-现在,我们通过一些例子,来直观感受一下 DrissionPage 的工作方式。
-
-## 📍 用 d 模式登录 gitee 网站
-
-网址:https://gitee.com/login
-此示例演示使用控制浏览器的方式自动登录 gitee 网站。
-
-!> **注意:**
如果您有已打开的 Chrome 浏览器,请先关闭,否则会造成冲突。后面在 [创建页面对象](%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%5C%E4%BD%BF%E5%88%9B%E5%BB%BA%E9%A1%B5%E9%9D%A2%E5%AF%B9%E8%B1%A1.md) 章节再介绍多 Chrome 浏览器共存的方法。
-
-```python
-from DrissionPage import WebPage
-
-# 用 d 模式创建页面对象(默认模式)
-page = WebPage()
-# 跳转到登录页面
-page.get('https://gitee.com/login')
-
-# 定位到账号文本框并输入账号
-page.ele('#user_login').input('你的账号')
-# 定位到密码文本框并输入密码
-page.ele('#user_password').input('你的密码')
-# 点击登录按钮
-page.ele('@value=登 录').click()
-```
-
-## 📍 用 s 模式爬取 gitee 网站开源列表
-
-以下代码可直接运行:
-
-```python
-from DrissionPage import WebPge
-
-# 用 s 模式创建页面对象
-page = WebPage('s')
-
-for i in range(1, 4):# 爬取3页
- # 跳转到第几页
- p.get(f'https://gitee.com/explore/all?page={i}')
- # 遍历所有库链接并打印
- for link in p.eles('.title project-namespace-path'):
- print(link.text, link.link)
-```
-
-结果:
-
-```
-小熊派开源社区/BearPi-HM_Nano https://gitee.com/bearpi/bearpi-hm_nano
-明月心/PaddleSegSharp https://gitee.com/raoyutian/PaddleSegSharp
-RockChin/QChatGPT https://gitee.com/RockChin/QChatGPT
-TopIAM/eiam https://gitee.com/topiam/eiam
-
-以下省略。。。
-```
-
-## 📍 `ChromiumPage`和`SessionPage`
-
-上面两个例子都不用转换模式,可以不需要用`WebPage`,而使用对应模式的页面对象也可以,使用方法是一样的。
-
-```python
-from DrissionPage import ChromiumPage
-from DrissionPage import SessionPage
-
-d_page = ChromiumPage() # 用于控制浏览器
-s_page = SessionPage() # 用于收发数据包
-
-# 以下省略……
-```
-
-# ✔️ 说明
-
-无论电脑安装的 Chrome 能否正常使用,都建议使用绿色版 Chrome,并且设置`user_data_path`。
-
-如果计划程序打包成 exe 文件,就不能使用默认配置文件记录配置,具体方法请查看“使用方法->打包程序”章节。
diff --git a/docs/入门指南/特性演示/下载文件.md b/docs/特性和亮点/特性演示/下载文件.md
similarity index 100%
rename from docs/入门指南/特性演示/下载文件.md
rename to docs/特性和亮点/特性演示/下载文件.md
diff --git a/docs/入门指南/特性演示/与requests代码对比.md b/docs/特性和亮点/特性演示/与requests代码对比.md
similarity index 100%
rename from docs/入门指南/特性演示/与requests代码对比.md
rename to docs/特性和亮点/特性演示/与requests代码对比.md
diff --git a/docs/入门指南/特性演示/与selenium代码对比.md b/docs/特性和亮点/特性演示/与selenium代码对比.md
similarity index 100%
rename from docs/入门指南/特性演示/与selenium代码对比.md
rename to docs/特性和亮点/特性演示/与selenium代码对比.md
diff --git a/docs/入门指南/特性演示/模式切换.md b/docs/特性和亮点/特性演示/模式切换.md
similarity index 100%
rename from docs/入门指南/特性演示/模式切换.md
rename to docs/特性和亮点/特性演示/模式切换.md
diff --git a/docs/入门指南/特性演示/获取并打印元素属性.md b/docs/特性和亮点/特性演示/获取并打印元素属性.md
similarity index 100%
rename from docs/入门指南/特性演示/获取并打印元素属性.md
rename to docs/特性和亮点/特性演示/获取并打印元素属性.md
diff --git a/docs/入门指南/贴心设计.md b/docs/特性和亮点/贴心设计.md
similarity index 96%
rename from docs/入门指南/贴心设计.md
rename to docs/特性和亮点/贴心设计.md
index 5f27d33..f18f632 100644
--- a/docs/入门指南/贴心设计.md
+++ b/docs/特性和亮点/贴心设计.md
@@ -42,7 +42,8 @@ element = page('some text', timeout=10)
# ✔️ 无需切入切出,逻辑清晰
-使用过 selenium 的人都知道,selenium 同一时间只能操作一个标签页或`