diff --git a/DrissionPage/config.py b/DrissionPage/config.py index 8b50562..cd2ae76 100644 --- a/DrissionPage/config.py +++ b/DrissionPage/config.py @@ -488,8 +488,8 @@ class DriverOptions(Options): self.timeouts['pageLoad'] *= 1000 self.timeouts['script'] *= 1000 - if '--no-sandbox' not in self._arguments: - self._arguments.append('--no-sandbox') + # if '--no-sandbox' not in self._arguments: + # self._arguments.append('--no-sandbox') @property def driver_path(self): diff --git a/README.md b/README.md index ab6f617..462b125 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# +# DrissionPage 是一个基于 python 的网页自动化工具。 @@ -58,14 +58,23 @@ DrissionPage 是一个基于 python 的网页自动化工具。 除了以上优点,本库还内置了无数人性化设计。 - 极简的语法规则。集成大量常用功能,代码更优雅 + - 定位元素更加容易,功能更强大稳定 + - 无处不在的等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心 + - 提供强大的下载工具。操作浏览器时也能享受快捷可靠的下载功能 + - 允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便 + - 使用 ini 文件保存常用配置,自动调用,提供便捷的设置,远离繁杂的配置项 + - 内置 lxml 作为解析引擎,解析速度成几个数量级提升 + - 使用 POM 模式封装,可直接用于测试,便于扩展 + - 高度集成的便利功能,从每个细节中体现 + - 还有很多细节,这里不一一列举,欢迎实际使用中体验:) # 🌟 简单演示 diff --git a/docs/README.md b/docs/README.md index eaa2fb8..bc47ef2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# +# ✨️ 概述 DrissionPage 是一个基于 python 的网页自动化工具。 @@ -10,6 +10,10 @@ DrissionPage 是一个基于 python 的网页自动化工具。 它的语法简洁而优雅,代码量少,对新手友好。 +star fork + +项目地址:[gitee](https://gitee.com/g1879/DrissionPage) | [github](https://github.com/g1879/DrissionPage) + **交流QQ群:** 897838127 **联系邮箱:** g1879@qq.com @@ -56,15 +60,24 @@ DrissionPage 是一个基于 python 的网页自动化工具。 除了以上优点,本库还内置了无数人性化设计。 - 极简的语法规则。集成大量常用功能,代码更优雅 + - 定位元素更加容易,功能更强大稳定 + - 无处不在的等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心 + - 提供强大的下载工具。操作浏览器时也能享受快捷可靠的下载功能 + - 允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便 + - 使用 ini 文件保存常用配置,自动调用,提供便捷的设置,远离繁杂的配置项 + - 内置 lxml 作为解析引擎,解析速度成几个数量级提升 + - 使用 POM 模式封装,可直接用于测试,便于扩展 + - 高度集成的便利功能,从每个细节中体现 -- 还有很多细节,这里不一一列举,欢迎实际使用中体验:) + +- 还有很多细节,这里不一一列举,欢迎实际使用中体验:D # 🖐🏻 免责声明 diff --git a/docs/WebPage使用方法/3.1创建页面对象.md b/docs/WebPage使用方法/3.1创建页面对象.md index 698238e..68c2d37 100644 --- a/docs/WebPage使用方法/3.1创建页面对象.md +++ b/docs/WebPage使用方法/3.1创建页面对象.md @@ -1,4 +1,4 @@ -在入门指南的快速上手一节,我们已经初步了解如何创建页面对象,本节进一步介绍更多功能。 +在入门指南的上手示例一节,我们已经初步了解如何创建页面对象,本节进一步介绍更多功能。 常用的页面对象有 3 种: @@ -48,7 +48,8 @@ # ✔️ 直接创建 这种方式代码最简洁,程序会从配置文件中读取配置,自动生成页面对象。可以保持代码简洁。 -在基本概念一节我们提到过,本库使用配置文件记录常用配置信息,也可以直接把配置写在代码里。 +在基本概念一节我们提到过,本库使用配置文件记录常用配置信息,也可以直接把配置写在代码里。 + ?>**Tips:**
默认配置文件中,程序使用 9222 端口启动浏览器,浏览器路径为 Chrome。如路径中没找到浏览器执行文件,Windows 系统下程序会在注册表中查找路径,如果还是没找到,则要用下一种方式手动配置路径。 ```python @@ -58,7 +59,7 @@ page = WebPage('d') # 指定以 s 模式创建页面对象 page = WebPage('s') -# 用 ChroumiumPage 创建页面对象 +# 用 ChromiumPage 创建页面对象 page = ChromiumPage() # 用 SessionPage 创建页面对象 diff --git a/docs/index.html b/docs/index.html index 42f6469..053e538 100644 --- a/docs/index.html +++ b/docs/index.html @@ -55,7 +55,7 @@ mergeNavbar: true, //小屏设备下合并导航栏到侧边栏 loadSidebar: true, loadNavbar: true, - coverpage: true, + coverpage: false, subMaxLevel: 2, pagination: { previousText: 'PREVIOUS', diff --git a/docs/入门指南/上手示例/控制浏览器.md b/docs/入门指南/上手示例/控制浏览器.md index 5a1380a..f6df286 100644 --- a/docs/入门指南/上手示例/控制浏览器.md +++ b/docs/入门指南/上手示例/控制浏览器.md @@ -6,10 +6,12 @@ 网址:[https://gitee.com/login](https://gitee.com/login) -打开网址,按`F12`,我们可以看到页面元素如下: +打开网址,按`F12`,我们可以看到页面 html 如下: ![](https://gitee.com/g1879/DrissionPage/raw/master/docs/imgs/gitee_1.jpg) +(图片点击放大) + 用户名输入框`id`为`'user_login'`,密码输入框`id`为`'user_password'`,登录按钮`value`为`'登 录'`。 我们可以用这三个属性定位这三个元素,然后对其输入数据和点击。 diff --git a/docs/入门指南/上手示例/收发数据包.md b/docs/入门指南/上手示例/收发数据包.md index 2aeffb3..a49c281 100644 --- a/docs/入门指南/上手示例/收发数据包.md +++ b/docs/入门指南/上手示例/收发数据包.md @@ -8,10 +8,12 @@ 这个示例的目标,要获取所有库的名称和链接,为避免对网站造成压力,我们只采集 3 页。 -打开网址,按`F12`,我们可以看到页面元素如下: +打开网址,按`F12`,我们可以看到页面 html 如下: ![](https://gitee.com/g1879/DrissionPage/raw/master/docs/imgs/gitee_2.jpg) +(图片点击放大) + 从 html 代码中可以看到,所有开源项目的标题都是`class`属性为`'title project-namespace-path'`的``元素。我们可以遍历这些``元素,获取它们的信息。 同时,我们观察到,列表页网址是以页数为参数访问的,如第一页 url 为`https://gitee.com/explore/all?page=1`,页数就是`page`参数。因此我们可以通过修改这个参数访问不同的页面。 @@ -40,7 +42,7 @@ for i in range(1, 4): 输出: -``` +```console 小熊派开源社区/BearPi-HM_Nano https://gitee.com/bearpi/bearpi-hm_nano 明月心/PaddleSegSharp https://gitee.com/raoyutian/PaddleSegSharp RockChin/QChatGPT https://gitee.com/RockChin/QChatGPT diff --git a/docs/入门指南/上手示例/模式切换.md b/docs/入门指南/上手示例/模式切换.md index d3aced8..e81e94a 100644 --- a/docs/入门指南/上手示例/模式切换.md +++ b/docs/入门指南/上手示例/模式切换.md @@ -1 +1,117 @@ -# 施工中。。。 +这个示例演示`WebPage`如何切换控制浏览器和收发数据包两种模式。 + +通常,切换模式是用来应付登录检查很严格的网站,可以用浏览器处理登录,再转换模式用收发数据包的形式来采集数据。 + +但是这种场景须要有对应的账号,不便于演示。演示使用浏览器在百度搜索,然后转换到收发数据包的模式来读取数据。虽然现实使用意义不大,但可以了解其工作模式。 + +# ✔️ 页面分析 + +网址:[https://www.baidu.com](https://www.baidu.com) + +打开网址,按`F12`,我们可以看到页面 html 如下: + +![](https://gitee.com/g1879/DrissionPage/raw/master/docs/imgs/baidu_1.jpg) + +(图片点击放大) + +输入框``元素`id`属性为`'kw'`,“百度一下”按钮``元素`id`属性为`'su'`。 + +输入关键词搜索后,再查看页面 html: + +![](https://gitee.com/g1879/DrissionPage/raw/master/docs/imgs/baidu_2.jpg) + +(图片点击放大) + +通过分析 html 代码,我们可以看出,每个结果的标题都存在于`

`元素里。因此,我们可以获取页面中所有`

`元素,再遍历获取其信息。 + +# ✔️ 示例代码 + +您可以直接运行以下代码: + +```python +from DrissionPage import WebPage + +# 创建页面对象 +page = WebPage() +# 访问网址 +page.get('https://www.baidu.com') +# 查找文本框元素并输入关键词 +page('#kw').input('DrissionPage') +# 点击搜索按钮 +page('#su').click(wait_loading=True) +# 切换到收发数据包模式 +page.change_mode() +# 获取所有

元素 +links = page.eles('tag:h3') +# 遍历获取到的元素 +for link in links: + # 打印元素文本 + print(link.text) +``` + +输出: + +```console +DrissionPage: 一个整合了selenium和requests_html的模块,... +python采集库DrissionPage- 腾讯云开发者社区-腾讯云 +DrissionPage- Web应用开发 - 青少年人工智能资源与创新... +DrissionPage-demos: 使用DrissionPage爬取常见网站的示例。 +DrissionPagev1.9.0 已经发布,WEB 自动化测试集成工具_程... +DrissionPage首页、文档和下载 - WEB 自动化测试集成工具 ... +DrissionPage- Gitee +DrissionPage—— Web 自动化测试集成工具 - OSCHINA - ... +DrissionPagev1.10.0 已经发布,WEB 自动化测试集成工具 |... +DrissionPagev2.2.1 发布,WEB 自动化测试集成工具 +``` + +# ✔️ 示例详解 + +首先,我们导入页面对象`WebPage`类。 + +```python +from DrissionPage import WebPage +``` + +接下来,我们创建一个`WebPage`对象。 + +```python +page = WebPage() +``` + +然后控制浏览器访问百度。 + +```python +page.get('https://www.baidu.com') +``` + +再通过模拟输入的方式输入关键词,模拟点击搜索按钮。 + +这里查找元素的方法上两个示例已经讲过,不再细说。 + +`click()`方法里面的`wait_loading`参数用于等待页面进入加载状态,避免操作过快出现异常。 + +```python +page('#kw').input('DrissionPage') +page('#su').click(wait_loading=True) +``` + +`change_mode()`方法用于切换工作模式,从当前控制浏览器的模式切换到收发数据包模式。 + +切换的时候程序会在新模式重新访问当前 url。 + +```python +page.change_mode() +``` + +切换后,我们可以用与控制浏览器一致的语法,获取页面元素,这里`eles()`方法是获取页面中所有`

`元素,它返回这些元素对象组成的列表。`tag:`是查找条件,表示查找某种类型的元素。 + +```python +links = page.eles('tag:h3') +``` + +最后,我们遍历这些元素,并逐个打印它们包含的文本。 + +```python +for link in links: + print(link.text) +```