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),宏定义适合没有关联关系的常量;但有时需要对一组有关联关系…...

《计算机网络A》单选题-复习题库解析-3
目录 106、MAN通常是指( ) 107、下列因素中,不会影响信道数据传输速率的是( ) 108、以太网交换机进行转发决策时使用的PDU地址是( ) 109、下列机制中,可以解决因数据帧丢失而…...

VM虚拟机配置ubuntu网络
目录 桥接模式 NAT模式 桥接模式 特点:ubuntu的IP地址与主机IP的ip地址不同 第一部分:VM虚拟机给ubuntu的网络适配器,调为桥接模式 第二部分:保证所桥接的网络可以上网 第三部分:ubuntu使用DHCP(默认&…...

【每日学点鸿蒙知识】Web高度适配、变量声明规范、动画取消、签名文件、包体积优化相关
1、HarmonyOS Web页面高度适配? 在Web页面设置高度100%时,发现和Web控件的高度不一致,这个需要设置什么可以达到页面高度和Web容器高度一致 目前只支持两种web布局模式,分别为Web布局跟随系统WebLayoutMode.NONE和Web基于页面大…...

uniapp使用ucharts组件
1.ucharts准备 有两种使用方式:一种是在uni的插件市场下载(组件化开发)。一种是手动引入ucharts包。官方都封装好组件了,我们不用岂不是浪费。 直接去dcloud插件市场(DCloud 插件市场)找,第一…...

LabVIEW工程师的未来发展
对于LabVIEW工程师以及更广义的编程从业者(包括“高级民工”码农)来说,随着AI技术和软件编程的逐步成熟,确实面临一些新的挑战和机遇。以下是对此问题的深入分析和未来方向的建议: 现状分析:技术过剩与竞争…...

java的bio、nio、aio 以及操作系统的select、poll、epoll
在 Java 和其他编程语言中,I/O 模型的选择对网络应用的性能和可扩展性有着重要影响。以下是 BIO(Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O),以及操作系统级别的…...

2024 年发布的 Android AI 手机都有什么功能?
大家好,我是拭心。 2024 年是 AI 快速发展的一年,这一年 AI 再获诺贝尔奖,微软/苹果/谷歌等巨头纷纷拥抱 AI,多款强大的 AI 手机进入我们的生活。 今年全球 16% 的智能手机出货量为 AI 手机,到 2028 年,这…...

RLHF,LM模型
LLM(Large Language Model) RLHF(Reinforcement Learning from Human Feedback),即以强化学习方式依据人类反馈优化语言模型。 RLHF思想:使用强化学习的方式直接优化带有人类反馈的语言模型。RLHF使得在一般文本数据语料库上训练的语言模型能与复杂的人类价值观对齐。 R…...

【机器学习】工业 4.0 下机器学习如何驱动智能制造升级
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 随着科技的飞速发展,工业 4.0 浪潮正席卷全球制造业,而机器学习作为这一变革中的关键技术,正以前…...

REST与RPC的对比:从性能到扩展性的全面分析
在微服务架构中,服务间通信是核心问题之一。常见的两种通信方式是REST(Representational State Transfer)和RPC(Remote Procedure Call)。它们各有优缺点,适用于不同场景。本文将从性能、扩展性、兼容性和开…...