From 01834e32c8bdbf7476dfdd03dfbd4157238eb59b Mon Sep 17 00:00:00 2001 From: g1879 Date: Tue, 18 Jan 2022 17:01:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 43 ++--- docs/README.md | 6 +- docs/Tips大集合.md | 34 ++-- docs/_coverpage.md | 2 +- docs/_sidebar.md | 62 +++---- docs/index.html | 9 +- docs/使用方法/Drission对象.md | 62 +++---- docs/使用方法/cookies的使用.md | 6 +- docs/使用方法/下载文件.md | 8 +- docs/使用方法/使用其它浏览器.md | 2 +- docs/使用方法/元素操作.md | 134 ++++++-------- docs/使用方法/创建页面对象.md | 54 +++--- docs/使用方法/启动配置/Chrome启动配置.md | 44 +++-- docs/使用方法/启动配置/Session启动配置.md | 52 +++--- docs/使用方法/启动配置/使用配置文件.md | 56 +++--- docs/使用方法/启动配置/概述.md | 4 +- docs/使用方法/对接selenium及requests代码.md | 4 +- docs/使用方法/打包程序.md | 6 +- docs/使用方法/查找页面元素.md | 26 +-- docs/使用方法/获取元素信息.md | 59 +++--- docs/使用方法/获取网页信息.md | 12 +- docs/使用方法/访问网页.md | 10 +- docs/使用方法/页面操作.md | 109 +++++------ docs/入门指南/快速上手.md | 8 +- docs/入门指南/特性演示/模式切换.md | 2 +- docs/入门指南/特性演示/获取并打印元素属性.md | 2 +- docs/版本历史.md | 182 +++++++++---------- 27 files changed, 472 insertions(+), 526 deletions(-) diff --git a/README.md b/README.md index 2bfb809..170fabf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # ✨️简洁!易用 !方便!✨️ -# ⭐️ 简介 - DrissionPage,即 driver 和 session 组合而成的 page。 是个基于 python 的 Web 自动化操作集成工具。 它用 POM 模式封装了页面和元素常用的方法, @@ -16,7 +14,7 @@ DrissionPage,即 driver 和 session 组合而成的 page。 **联系邮箱:** g1879@qq.com -## 📔 背景 +## 📕 背景 requests 爬虫面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,体验不好,开发效率不高。 使用 selenium,可以很大程度上绕过这些坑,但 selenium 效率不高。因此,这个库将 selenium 和 requests 合而为一,不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。 @@ -27,7 +25,7 @@ requests 爬虫面对要登录的网站时,要分析数据包、JS 源码, 作者有多年自动化和爬虫经验,踩过无数坑,总结出的经验全写到这个库里了。内置了 N 多实用功能,对常用功能作了整合和优化。 -## 🔮 特性 +## 🎉 特性 - 代码高度集成,以简洁的代码为第一追求。 - 页面对象可在 selenium 和 requests 模式间任意切换,保留登录状态。 @@ -62,13 +60,13 @@ requests 爬虫面对要登录的网站时,要分析数据包、JS 源码, - d 模式配置可同时兼容`debugger_address`和其它参数,原生不能兼容。 - 还有很多这里不一一列举………… -# 🪄 简单演示 +# 🍀 简单演示 -**与 selenium 代码对比** +☘️ **与 selenium 代码对比** 以下代码实现一模一样的功能,对比两者的代码量: -- 用显性等待方式定位第一个文本包含`some text`的元素 +🌿 用显性等待方式定位第一个文本包含`some text`的元素 ```python # 使用 selenium: @@ -78,7 +76,7 @@ element = WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH, element = page('some text') ``` -- 跳转到第一个标签页 +🌿 跳转到第一个标签页 ```python # 使用 selenium: @@ -88,7 +86,7 @@ driver.switch_to.window(driver.window_handles[0]) page.to_tab(0) ``` -- 按文本选择下拉列表 +🌿 按文本选择下拉列表 ```python # 使用 selenium: @@ -100,7 +98,7 @@ select_element.select_by_visible_text('text') element.select('text') ``` -- 拖拽一个元素 +🌿 拖拽一个元素 ```python # 使用 selenium: @@ -110,7 +108,7 @@ ActionChains(driver).drag_and_drop(ele1, ele2).perform() ele1.drag_to(ele2) ``` -- 滚动窗口到底部(保持水平滚动条不变) +🌿 滚动窗口到底部(保持水平滚动条不变) ```python # 使用 selenium: @@ -120,7 +118,7 @@ driver.execute_script("window.scrollTo(document.documentElement.scrollLeft, docu page.scroll.to_bottom() ``` -- 设置 headless 模式 +🌿 设置 headless 模式 ```python # 使用 selenium: @@ -131,7 +129,7 @@ options.add_argument("--headless") set_headless() ``` -- 获取伪元素内容 +🌿 获取伪元素内容 ```python # 使用 selenium: @@ -141,7 +139,7 @@ text = webdriver.execute_script('return window.getComputedStyle(arguments[0], ": text = element.pseudo_after ``` -- shadow-root 操作 +🌿 shadow-root 操作 selenium 新增了`ShadowRoot`,但功能实在是太少。 ```python @@ -156,7 +154,7 @@ ele = shadow_element.ele('tag:div') ele.click() ``` -- 用 xpath 直接获取属性或文本节点(返回文本) +🌿 用 xpath 直接获取属性或文本节点(返回文本) ```python # 使用 selenium: @@ -167,7 +165,7 @@ class_name = element('xpath://div[@id="div_id"]/@class') text = element('xpath://div[@id="div_id"]/text()[2]') ``` -- 随时让浏览器窗口消失和显示 +🌿 随时让浏览器窗口消失和显示 ```python # selenium 无此功能 @@ -179,11 +177,11 @@ page.show_browser() # 重新显示浏览器窗口 注:本功能只支持 Windows,且须设置了`local_port`或`debugger_address`参数时才能生效。 -**与 requests 代码对比** +☘️ **与 requests 代码对比** 以下代码实现一模一样的功能,对比两者的代码量: -- 获取元素内容 +🌿 获取元素内容 ```python url = 'https://baike.baidu.com/item/python' @@ -204,7 +202,7 @@ title = page('tag:h1').text Tips: DrissionPage 自带默认`headers` -- 下载文件 +🌿 下载文件 ```python url = 'https://www.baidu.com/img/flexible/logo/pc/result.png' @@ -220,7 +218,7 @@ with open(f'{save_path}\\img.png', 'wb') as fd: page.download(url, save_path, 'img') # 支持重命名,处理文件名冲突,自动创建目标文件夹 ``` -**模式切换** +☘️ **模式切换** 用 selenium 登录网站,然后切换到 requests 读取网页。两者会共享登录信息。 @@ -267,7 +265,7 @@ Git 命令学习 https://oschina.gitee.io/learn-git-branching/ Git 命令学习 ``` -# 🔠 使用方法 +# 🛠 使用方法 [点击跳转到使用文档](http://g1879.gitee.io/drissionpage) @@ -282,6 +280,5 @@ Git 命令学习 如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :) -| ![](https://gitee.com/g1879/DrissionPage-demos/raw/master/pics/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220104105717.jpg) | ![](https://gitee.com/g1879/DrissionPage-demos/raw/master/pics/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220104105709.jpg) | -| ------------------------------------------------------------ | ------------------------------------------------------------ | +![](https://gitee.com/g1879/DrissionPage-demos/raw/master/pics/code.jpg) diff --git a/docs/README.md b/docs/README.md index a50a4b2..d0893d0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -33,7 +33,7 @@ requests 爬虫面对要登录的网站时,要分析数据包、JS 源码, - 两种模式提供一致的 API,使用体验一致。 - 人性化设计,集成众多实用功能,大大降低开发工作量。 -## 💡 亮点功能 +## 🎇 亮点功能 - 每次运行程序可以反复使用已经打开的浏览器。如手动设置网页到某个状态,再用程序接管,或手动处理登录,再用程序爬内容。无须每次运行从头启动浏览器,超级方便。 - 使用 ini 文件保存常用配置,自动调用,也提供便捷的设置 API,远离繁杂的配置项。 @@ -69,6 +69,4 @@ requests 爬虫面对要登录的网站时,要分析数据包、JS 源码, 如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :) -| ![](https://gitee.com/g1879/DrissionPage-demos/raw/master/pics/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220104105717.jpg) | ![](https://gitee.com/g1879/DrissionPage-demos/raw/master/pics/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220104105709.jpg) | -| ------------------------------------------------------------ | ------------------------------------------------------------ | - +![](https://gitee.com/g1879/DrissionPage-demos/raw/master/pics/code.jpg) diff --git a/docs/Tips大集合.md b/docs/Tips大集合.md index 15bde77..a70baef 100644 --- a/docs/Tips大集合.md +++ b/docs/Tips大集合.md @@ -1,26 +1,26 @@ ## 全局 -- 切换模式时会自动复制 cookies 到目标模式,并在目标模式下重新访问当前网址,可在参数中禁止自动访问。 -- 访问网址时如遇到异常,会自动重试3次,也可在对象属性或连接参数里设置重试次数和间隔时间。d 模式这个功能要重载了 check_page() 方法才有效。 -- 获取到的文本会自动替换 & nbsp; 为空格。 -- 可以在元素下直接使用 > 以 css selector 方式获取当前元素直接子元素。如 ele1.ele('css:>div')。原生不支持这种写法。 -- 用 xpath 获取元素的子元素时,可省略前面的 .。如 ele1.ele('div') 和 ele1.ele('.//div') 是一致的。 +- 切换模式时会自动复制`cookies`到目标模式,并在目标模式下重新访问当前网址,可在参数中禁止自动访问。 +- 访问网址时如遇到异常,会自动重试 3 次,也可在对象属性或连接参数里设置重试次数和间隔时间。d 模式这个功能要重载了`check_page()`方法才有效。 +- 获取到的文本会自动替换` `为空格。 +- 可以在元素下直接使用`>`以 css selector 方式获取当前元素直接子元素。如`ele1.ele('css:>div')`。原生不支持这种写法。 +- 用 xpath 获取元素的子元素时,可省略前面的`.`。如`ele1.ele('div')`和`ele1.ele('.//div')`是一致的。 - 保存空的配置对象时,如没有指定路径,会保存到默认 ini 文件。 -- download() 方法会自动创建 goal_path 参数的文件夹,因此可直接传入不存在的文件夹路径。 -- set_cookies()可以接收RequestsCookieJar, list, tuple, str, dict,只要格式对扔进去它会自动调整。其中 list 和 tuple 的内容可为 Cookie对象、dict、str。 +- `download()`方法会自动创建`goal_path`参数的文件夹,因此可直接传入不存在的文件夹路径。 +- `set_cookies()`可以接收`RequestsCookieJar`、`list`、`tuple`、`str`、`dict`,只要格式对扔进去它会自动调整。其中`list`和`tuple`的内容可为`Cookie`、`dict`、`str`。 ## s 模式 -- 在创建 MixPage 对象时传入的 Session 配置是全局有效的,一般无须每次连接传入。 -- ini 文件里设置了默认 s 模式的 headers,一般情况可直接使用,也可手动设置。 -- s 模式访问网页时会自动纠正编码,具体为先从 headers 获取,再从页面 meta 标签获取,都找不到就执行 r.apparent_encoding。因此无须手动设置。 -- 如果没有传入 referer 和 host 值,s 模式在连接时会自动根据当前域名自动填写 Host 和 Referer 属性。 +- 在创建`MixPage`对象时传入的`Session`配置是全局有效的,一般无须每次连接传入。 +- ini 文件里设置了默认 s 模式的`headers`,一般情况可直接使用,也可手动设置。 +- s 模式访问网页时会自动纠正编码,具体为先从`headers`获取,再从页面`meta`标签获取,都找不到就执行`r.apparent_encoding`。因此无须手动设置。 +- 如果没有传入`referer`和`host`值,s 模式在连接时会自动根据当前域名自动填写`Host`和`Referer`属性。 ## d 模式 -- d 模式查找元素默认设置等待超时10秒,10秒内找到立即返回元素,超时返回 None。也可指定超时时间。 -- cilck() 方法用 selenium 点击失败时会用 js 方式重试,也可在参数里指定直接用 js 或不用 js 重试。 -- click() 方法可设置 timeout 参数,在时间内会不断重试点击目标,click(by_js=False) 可用于等待覆盖在元素上的遮罩层消失。 -- 可以用 xpath 直接获取元素属性或文本节点内容,如ele1.ele('xpath://div/@class')或ele1.ele('xpath://div/text()[2]')。原生不支持这种用法。 -- 在 MixPage 对象设置 timeout 后,该页面下所有元素的查找都会遵循该设置,该值默认为 10。也可以每次查找元素时单独设置,单独设置不影响页面对象的 timeout 属性。 -- 若设置了 debugger_address,创建 driver 时程序会自动检测该端口,如为空,则自动在该端口启动一个浏览器进程并接入。程序完毕该浏览器不自动关闭,以便后续使用。 \ No newline at end of file +- d 模式查找元素默认设置等待超时 10 秒,10 秒内找到立即返回元素,超时返回`None`。也可指定超时时间。 +- `cilck()`方法用 selenium 点击失败时会用 js 方式重试,也可在参数里指定直接用 js 或不用 js 重试。 +- `click()`方法可设置`timeout`参数,在时间内会不断重试点击目标,`click(by_js=False)`可用于等待覆盖在元素上的遮罩层消失。 +- 可以用 xpath 直接获取元素属性或文本节点内容,如`ele1.ele('xpath://div/@class')`或`ele1.ele('xpath://div/text()[2]')`。原生不支持这种用法。 +- 在`MixPage`对象设置`timeout`后,该页面下所有元素的查找都会遵循该设置,该值默认为 10。也可以每次查找元素时单独设置,单独设置不影响页面对象的`timeout`属性。 +- 若设置了`local_port`或`debugger_address`,创建 driver 时程序会自动检测该端口,如为空,则自动在该端口启动一个浏览器进程并接入。程序完毕该浏览器不自动关闭,以便后续使用。 \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md index ed15bce..6d9625c 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,4 +1,4 @@ -## DrissionPage +# DrissionPage 以页面为单位整合 selenium 和 requests,封装了常用操作。 极大地简化了代码,易于使用,并可实现两种模式的无缝切换。 diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 592e982..9d205c4 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -1,43 +1,43 @@ * [⭐️ 简介](README.md) -* 🧭入门指南 - * [🪄 基本概念](入门指南\基本概念.md) - * [🖐🏻 快速上手](入门指南\快速上手.md) - * 🎭 特性演示 - * [🐙 与 requests 对比](入门指南\特性演示\与requests代码对比.md) - * [🐟 与 selenium 对比](入门指南\特性演示\与selenium代码对比.md) - * [🦈 模式切换](入门指南\特性演示\模式切换.md) - * [🐳 获取并打印元素属性](入门指南\特性演示\获取并打印元素属性.md) - * [🐬 下载文件](入门指南\特性演示\下载文件.md) +* [🧭 入门指南](#) + * [🔥 基本概念](入门指南\基本概念.md) + * [👍 快速上手](入门指南\快速上手.md) + * [🍀 特性演示](#) + * [🌿 与 requests 对比](入门指南\特性演示\与requests代码对比.md) + * [🌿 与 selenium 对比](入门指南\特性演示\与selenium代码对比.md) + * [🌿 模式切换](入门指南\特性演示\模式切换.md) + * [🌿 获取并打印元素属性](入门指南\特性演示\获取并打印元素属性.md) + * [🌿 下载文件](入门指南\特性演示\下载文件.md) -* 🔠使用方法 - * [🐵 创建页面对象](使用方法\创建页面对象.md) - * [🦊 访问网页](使用方法\访问网页.md) - * [🐶 查找页面元素](使用方法\查找页面元素.md) - * [🦝 获取元素信息](使用方法\获取元素信息.md) - * [🐱 元素操作](使用方法\元素操作.md) - * [🐮 获取网页信息](使用方法\获取网页信息.md) - * [🐷 页面操作](使用方法\页面操作.md) - * 🐻 启动配置 - * [🐉 概述](使用方法\启动配置\概述.md) - * [🦖 Chrome 启动配置]('使用方法\启动配置\Chrome启动配置.md') - * [🦕 Session 启动配置](使用方法\启动配置\Session启动配置.md) - * [🐊 使用配置文件](使用方法\启动配置\使用配置文件.md) - * [🐼 下载文件](使用方法\下载文件.md) - * [🐨 cookies 的使用](使用方法\cookies的使用.md) - * [🐰 Drission 对象](使用方法\Drission对象.md) - * [🐹 对接 selenium 及 requests 代码](使用方法\对接selenium及requests代码.md) - * [🦇 使用其它浏览器](使用方法\使用其它浏览器.md) - * [🦒 DriverPage 和 SessionPage](使用方法\DriverPage和SessionPage.md) - * [🐭 打包程序](使用方法\打包程序.md) +* [🛠 使用方法](#) + * [🔨 创建页面对象](使用方法\创建页面对象.md) + * [🔨 访问网页](使用方法\访问网页.md) + * [🔨 查找页面元素](使用方法\查找页面元素.md) + * [🔨 获取元素信息](使用方法\获取元素信息.md) + * [🔨 元素操作](使用方法\元素操作.md) + * [🔨 获取网页信息](使用方法\获取网页信息.md) + * [🔨 页面操作](使用方法\页面操作.md) + * [🔨 启动配置](#) + * [🔧 概述](使用方法\启动配置\概述.md) + * [🔧 Chrome 启动配置](使用方法\启动配置\Chrome启动配置.md) + * [🔧 Session 启动配置](使用方法\启动配置\Session启动配置.md) + * [🔧 使用配置文件](使用方法\启动配置\使用配置文件.md) + * [🔨 下载文件](使用方法\下载文件.md) + * [🔨 cookies 的使用](使用方法\cookies的使用.md) + * [🔨 Drission 对象](使用方法\Drission对象.md) + * [🔨 对接 selenium 及 requests 代码](使用方法\对接selenium及requests代码.md) + * [🔨 使用其它浏览器](使用方法\使用其它浏览器.md) + * [🔨 DriverPage 和 SessionPage](使用方法\DriverPage和SessionPage.md) + * [🔨 打包程序](使用方法\打包程序.md) -* 💖 实用示例 +* [💖 实用示例](#) * [🧡 自动登录码云](实用示例\自动登录码云.md) * [🧡 获取各国疫情排名](实用示例\获取各国疫情排名.md) * [🧡 下载星巴克产品图片](实用示例\下载星巴克产品图片.md) * [🧡 同时操作多个浏览器](实用示例\同时操作多个浏览器.md) -* [✨️ Tips大集合](Tips大集合.md) +* [⚡️ Tips大集合](Tips大集合.md) * [🎯️ 版本历史](版本历史.md) * [💐 鸣谢](鸣谢.md) diff --git a/docs/index.html b/docs/index.html index bd026e0..35e98cb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,7 +8,11 @@ - + + + + +