17爬虫:关于DrissionPage相关内容的学习01
概述
前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。
DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。
DressionPage的有点在于既可以兼顾selenium自动操作网页的便捷性,还不需要像selenium那样配置chromedriver,也不需要过一段时间更新chrome浏览器和chromedriver。同时DrissionPage可以同requests一样高效,不需要担心js逆向等问题。
简单的来说,DressionPage能够高效的实现所见即所爬,语法简洁优雅,代码量少,对新手友好。DrissionPage最大的优势在于它是最新新出的网页自动化测试工具,现阶段针对他的反爬虫措施几乎没有。
安装DrissionPage
和安装requests模块一样,在pycharm终端中输入如下的pip命令,在网络正常的情况下就可以正常使用该模块的相关功能。
pip install DrissionPage
如果想要升级到最新的版本,执行如下的命令:
pip install DrissionPage --upgrade
如果想要安装指定的版本,执行如下的命令:
pip install DrissionPage==4.0.0b17
我这里安装的是当前最行的版本,如下图所示:
入门指南
DrissionPage提供的功能放在如下的路径中:
from DrissionPage import * # 浏览器类、配置类、页面类
from DrissionPage.errors import * # 错误类
from DrissionPage.common import * # 辅助工具类
from DrissionPage.items import * # 衍生对象,用于类型判断
看到这里,相信大家也是很懵圈。不要着急,接下来慢慢分析,我也是第一次使用DrissionPage模块。
浏览器类
from DrissionPage import Chromium
Chromium是浏览器类,浏览器类主要用于连接浏览器,管理标签页及其他浏览器有关的操作。Chromium相当于总管,可以作为浏览器入口,使用它产生的Tab对象去操作每一个标签页。
页面类
from DrissionPage import ChromiumPage
(1)ChromiumPage是将浏览器对象和第一个标签页对象封装在一起,用于控制浏览器。ChromiumPage简化了操作,使用效果与直接使用Chromium对象基本一致。不同之处在于,ChromiumPage生成的标签页对象是ChromiumTab,不能切换模式。
from DrissionPage import WebPage
(2)WebPage与ChromiumPage类似,不同之处在于WebPage产生的Tab对象是可以切换模式的,即既可以控制浏览器,也可以收发数据包。
from DrissionPage import SessionPage
(3)SessionPage用于收发数据包,是对requests和lxml进行封装实现的。SessionPage将网络连接和结果解析封装成页面,操作逻辑和其他页面保持一致。
配置工具
from DrissionPage import ChromiumOptions
(1)ChromiumOptions类用于设置浏览器的启动参数,这些参数只有在启动浏览器有用,接管已经存在的浏览器是不起作用的。
from DrissionPage import SessionOptions
(2)SessionOptions类用于设置Session对象启动参数,用于配置Session Page或webPage的s模式的连接参数。
from DrissionPage.common import Settings
(3)Settings用全局的配置,如找不到元素是否抛出异常。
辅助工具
from DrissionPage.common import Keys
(1)Keys:按键类,用于键入 ctrl、alt 等按键。
from DrissionPage.common import By
(2)By:同selenium一样。
其他工具
wait_until
:可等待传入的方法结果为真make_session_ele
:从 html 文本生成ChromiumElement
对象configs_to_here
:把配置文件复制到当前路径get_blob
:获取指定的 blob 资源tree
:用于打印页面对象或元素对象结构from_selenium
:用于对接 selenium 代码from_playwright
:用于对接 playwright 代码
异常
from DrissionPage.errors import ElementNotFoundError
异常放在DrissionPage.errors
路径。
衍生对象
from DrissionPage.items import SessionElement
from DrissionPage.items import ChromiumElement
from DrissionPage.items import ShadowRoot
from DrissionPage.items import NoneElement
from DrissionPage.items import ChromiumTab
from DrissionPage.items import MixTab
from DrissionPage.items import ChromiumFrame
Tab、Element 等被其它对象生成的对象,开发过程中需要类型判断时需要导入这些类型。
设置语言
DrissionPage的报错信息及提示支持中文和英文,设置中文提示的方法如下:
from DrissionPage.common import SettingsSettings.set_language('zh_cn') # 设置为中文时,填入'zh_cn'Settings.set_language('en') # 默认是英文提示
准备工作
测试是否能够通过DrissionPage启动浏览器,我们这里采用的Chrome。对应的代码如下:
from DrissionPage import Chromiumtab = Chromium().latest_tab
tab.get('https://DrissionPage.cn')
在pycharm中运行上述代码,发现Chrome能够自动打开并且能够访问官网,说明我们的配置没有问题。
如果在程序运行的过程中报错,说明我们的Chrome路径设置有问题,
查找路径
(1)查找自身电脑中Chrome的路径,方法如下:
打开自己饿Chrome浏览器,在地址栏中输入chrome://version,回车。在加载中的页面中看“执行性文件”一栏,其后面就是我们需要的Chrome路径。
设置路径
设置路径的方法一:
设置路径的方法二:
设置的方法大家可以参考官网的教程,非常的方便,这里不再赘述
🌏 准备工作 | DrissionPage官网
操作浏览器
from DrissionPage import Chromium# 启动或接管浏览器,并创建标签页对象
tab = Chromium().latest_tab # 创建一个Chromium对象,用于连接浏览器,并用latest_tab获取一个标签页对象
# 跳转到登录页面
tab.get('https://gitee.com/login') # get()方法用于访问参数中的网址。它会等待页面完全加载,再继续执行后面的代码。默认是等待10秒
# 定位到账号文本框,获取文本框元素
ele = tab.ele('#user_login') # 通过html代码中的id的名字
# 输入对文本框输入账号
ele.input('1234567')
# 定位到密码文本框并输入密码
tab.ele('#user_password').input('1234567') # 通过链式操作直接输入对应的文本
# 点击登录按钮
tab.ele('@value=登 录').click() # 通过value值确定元素 @表示按属性名查找
基本概念
网页自动化的两种形式:
(1)直接服务器发送数据包,获取需要的数据;
(2)控制浏览器和网页进行交互。
基本使用逻辑如下:无论是控制浏览器还是收发数据,操作逻辑基本一致。
- 创建页面对象
- 从页面对象中获取元素对象
- 对元素对象读取或操作,实现数据获取和页面控制
最主要的对象有两种:页面对象和其生成的元素对象
主要对象
浏览器和标签页对象:
- Chromium:浏览器对象,用于连接浏览器,管理标签页以及其他浏览器有关的操作
- MixTab:浏览器标签页对象,由Chromium对象产生,一个对象控制一个实际的标签页
- ChromiumTab:也是标签页对象,由ChromiumPage对象产生,不可切换收发数据包模式
元素对象:
ChromiumElement
:浏览器元素对象SessionElement
:静态元素对象ChromiumFrame
:<iframe>
元素对象,兼有标签页对象和元素特性ShadowRoot
:shadow-root 元素对象
Page对象:
ChromiumPage
:能管理浏览器本身的标签页对象,可用作程序入口WebPage
:类似于ChromiumPage
,整合浏览器控制和收发数据包于一体的页面对象SessionPage
:单纯用于收发数据包的页面对象,可单独使用(不会启动新浏览器窗口)
称呼:
MixTab
、ChromiumTab
统称为 Tab 对象ChromiumPage
、WebPage
和SessionPage
统称为 Page 对象- Page 对象、Tab 对象和
ChromiumFrame
统称为页面对象
工作模式
MixTab和WebPage既可以控制浏览器对象,也可以用数据包的方式访问网络。通俗的讲前者就是如同selenium的工作模式,后者就是requests的工作模式,也就是前面所说的网页自动化的两种形式。
在DrissionPage中,者两种工作模式分为d模式和s模式,页面对象可以在这两种工作模式之间切换,但任一时间只能是一种工作模式。
d模式用于控制浏览器对象,不仅可以读取浏览器获取到的信息,还能对页面进行操作,如点击、填写、开关标签页、改变元素属性、执行 js 脚本等等。d 模式功能强大,但运行速度受浏览器制约非常缓慢,而且需要占用大量内存。
s模式基于数据包进行读取或发送,不能对页面进行操作,不能运行 js。爬取数据时,如网站数据包较为简单,应首选 s 模式。
模式切换
MixTab
和WebPage
对象可以在 d 模式和 s 模式之间切换,这通常用于以下情况:
- 当登录验证很严格,难以解构,如有验证码的时候,用浏览器处理登录,然后转换成 s 模式爬取数据。既避免了处理烧脑的 js,又能享受 s 模式的速度。
- 页面数据由 js 产生,且页面结构极其复杂,可以用 d 模式读取页面元素,然后把元素转成 s 模式的元素进行分析。可以极大地提高 d 模式的处理速度。
以上模式转换的思想非常重要。比如说一个网站需要requests携带cookie信息才可以请求到数据,倒是该网站的cookie获取非常困难(数据加密,或者验证码登录等),这时我们应该能够想到利用selenium完成网站的登录,获取cookie信息,然后再使用requests携带cookie信息完成数据请求。
相关文章:

17爬虫:关于DrissionPage相关内容的学习01
概述 前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。 DressionPage的…...

【HarmonyOS之旅】HarmonyOS概述(一)
目录 1 -> HarmonyOS简介 2 -> HarmonyOS发展历程 3 -> HarmonyOS技术特性 3.1 -> 硬件互助,资源共享 3.1.1 -> 分布式软总线 3.1.2 -> 分布式设备虚拟化 3.1.3 -> 分布式数据管理 3.1.4 -> 分布式任务调度 3.1.5 -> 分布式连接…...

chatwoot 开源客服系统搭建
1. 准备开源客服系统(我是用的Chatwoot ) 可以选择以下开源客服系统作为基础: Chatwoot: 开源,多语言,跟踪和分析,支持多渠道客户对接,自动化和工作流等。源码Zammad: 现代的开源工单系统。Fr…...

30分钟搭建 Typecho 个人博客教程
Typecho是一款PHP博客程序,相比于WordPress,Typecho显得更加的轻量级和简洁。现在越来越多的人倾向于用Typecho来搭建个人博客——众所周知,能跑WordPress的机器都不便宜。 Typecho是一款国人团结打造的开源博客系统,和WordPress…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)
为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具…...

鸿蒙应用开发启航计划
以前有过简单的学习了解,但是现在工作内容的原因,要专门搞这个,因此需要更加熟练地掌握鸿蒙应用开发。 1.开发IDE -- DevEco Studio Windows环境 运行环境要求 为保证DevEco Studio正常运行,建议电脑配置满足如下要求ÿ…...

基本算法——回归
目录 创建工程 加载数据 分析属性 创建与评估回归模型 线性回归 回归树 评估 完整代码 结论 本节将通过分析能源效率数据集(Tsanas和Xifara,2012)学习基本的回归算法。我们将基 于建筑的结构特点(比如表面、墙体与屋顶面…...

深度学习——神经网络中前向传播、反向传播与梯度计算原理
一、前向传播 1.1 概念 神经网络的前向传播(Forward Propagation)就像是一个数据处理的流水线。从输入层开始,按照网络的层次结构,每一层的神经元接收上一层神经元的输出作为自己的输入,经过线性变换(加权…...
解决git push报错:not valid: is this a git repository?
今天想把代码更新到仓库里,执行git push origin master:main的时候报错:not valid: is this a git repository? 查了好多方法都没用。后来经过这篇文章的启发:https://zhuanlan.zhihu.com/p/301518109 可能是由于校园网的问题,…...
树形查询转成TreeNode[],添加新节点
在使用PrimeVue的TreeTable组件时,需要将带有层级的数据转换为TreeNode[]类型的数据结构。TreeNode是PrimeVue中定义的一个接口,用于表示树节点。通常,带有层级的数据是一个嵌套的对象或数组,其中每个对象可能包含子对象ÿ…...
【Rust自学】8.2. Vector + Enum的应用
8.2.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编…...

攻防世界web第十题Web_python_template_injection
这是题目,从题目上看是一个python模板注入类型的题目。 首先测试是否存在模板注入漏洞,构造http://61.147.171.105:57423/{{config}} 得到 说明存在模板注入漏洞,继续注入 构造http://61.147.171.105:57423/{{‘’.class.mro}}: 得到 再构造…...

vmware 修改Ubuntu终端字体大小
1. 2、 3、 4、 5、 6、点击select...

API 设计:从基础到最佳实践
https://levelup.gitconnected.com/api-design-101-from-basics-to-best-practices-a0261cdf8886 在本次深入研究中,我们将从基础开始,逐步了解 API 设计,并逐步实现定义卓越 API 的最佳实践。 作为开发人员,您可能熟悉其中的许多…...

ROUGE指标在自然语言处理中的应用:从理论到实践
引言 你是否曾经遇到过机器生成的文本摘要与原文内容不符的情况?或者在使用机器翻译时,发现译文虽然“看起来”正确,但语义却与原文相差甚远?在自然语言处理(NLP)领域,如何科学地评估生成文本的…...
GraalVM:云原生时代的Java虚拟机
1. 概述 GraalVM是由Oracle公司开发的一款高性能、多语言的虚拟机平台。它不仅兼容传统的JVM字节码执行,还引入了即时编译(JIT)技术的革新,以及对多种编程语言的支持。GraalVM旨在通过提供更高效的执行环境来满足云计算环境中日益…...

Linux 信号集与信号掩码
目录 一、引言 二、信号集是什么 三、信号集关键函数 1.信号集的创建与初始化 2.信号的添加与删除 3.信号集的阻塞与解除阻塞 四、信号集实际应用场景 五、信号掩码的作用 六、信号掩码相关函数 1.sigprocmask 函数 2.sigemptyset 和 sigfillset 函数 七、信号掩码注…...

如何设置Edge浏览器访问软件
使用Edge浏览器访问分销ERP A\V系列软件时会出现各种报错,如何设置Edge浏览器使其正常访问,请看下面的具体操作。 一、打开Edge浏览器,点击右上角的 设置及其他,如图: 二、在弹出界面中,点击 扩展ÿ…...

DL笔记:旋转编码RoPE
1 背景 由于计算资源限制,目前的LLM大多在较短的上下文长度中进行训练,在推理中,如果超出预训练的长度,模型的性能将会显著降低 ——>需要一个可提供外推性的位置编码最经典的绝对位置编码就是原始Transformer中的那个sinusoi…...
C语言自定义类型与文件操作
构造类型 枚举类型 若定义不相关的常量使用宏定义;若定义一组相关的常量使用枚举。switch中case后访问的就是枚举。 定义: 我们一般情况下定义常量使用宏定义(#define),宏定义适合没有关联关系的常量;但有时需要对一组有关联关系…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...