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:单纯用于收发数据包的页面对象,可单独使用(不会启动新浏览器窗口)

称呼:

  • MixTabChromiumTab统称为 Tab 对象
  • ChromiumPageWebPageSessionPage统称为 Page 对象
  • Page 对象、Tab 对象和ChromiumFrame统称为页面对象

工作模式

MixTab和WebPage既可以控制浏览器对象,也可以用数据包的方式访问网络。通俗的讲前者就是如同selenium的工作模式,后者就是requests的工作模式,也就是前面所说的网页自动化的两种形式。

在DrissionPage中,者两种工作模式分为d模式和s模式,页面对象可以在这两种工作模式之间切换,但任一时间只能是一种工作模式。

d模式用于控制浏览器对象,不仅可以读取浏览器获取到的信息,还能对页面进行操作,如点击、填写、开关标签页、改变元素属性、执行 js 脚本等等。d 模式功能强大,但运行速度受浏览器制约非常缓慢,而且需要占用大量内存。

s模式基于数据包进行读取或发送,不能对页面进行操作,不能运行 js。爬取数据时,如网站数据包较为简单,应首选 s 模式。

模式切换

MixTabWebPage对象可以在 d 模式和 s 模式之间切换,这通常用于以下情况:

  • 当登录验证很严格,难以解构,如有验证码的时候,用浏览器处理登录,然后转换成 s 模式爬取数据。既避免了处理烧脑的 js,又能享受 s 模式的速度。
  • 页面数据由 js 产生,且页面结构极其复杂,可以用 d 模式读取页面元素,然后把元素转成 s 模式的元素进行分析。可以极大地提高 d 模式的处理速度。

以上模式转换的思想非常重要。比如说一个网站需要requests携带cookie信息才可以请求到数据,倒是该网站的cookie获取非常困难(数据加密,或者验证码登录等),这时我们应该能够想到利用selenium完成网站的登录,获取cookie信息,然后再使用requests携带cookie信息完成数据请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501624.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络•自顶向下方法:网络层介绍、路由器的组成

网络层介绍 网络层服务&#xff1a;网络层为传输层提供主机到主机的通信服务 每一台主机和路由器都运行网络层协议 发送终端&#xff1a;将传输层报文段封装到网络层分组中&#xff0c;发送给边缘路由器路由器&#xff1a;将分组从输入链路转发到输出链路接收终端&#xff1…

下载linux aarch64版本的htop

htop代码网站似乎没有编译好的各平台的包&#xff0c;而自己编译需要下载一些工具&#xff0c;比较麻烦。这里找到了快速下载和使用的方法&#xff0c;记录一下。 先在linux电脑上执行&#xff1a; mkdir htop_exe cd htop_exe apt download htop:arm64 # 会直接下载到当前目…

呼叫中心中间件实现IVR进入排队,判断排队超时播放提示音

文章目录 [TOC](文章目录) 前言需求排队结束原因 联系我们实现步骤1. 调用http接口返回动作2. 启用拨号方案 前言 需求 呼叫中心需要实现调用IVR接口进入排队&#xff0c;如果是因为等待超时导致退出排队的&#xff0c;那就播放一段提示音再挂断通话&#xff1b;其他的情况就…

如何二次封装组件(vue3版本)

在开发 Vue 项目中我们一般使用第三方组件库进行开发&#xff0c;如 Element-Plus, 但是这些组件库提供的组件并不一定满足我们的需求&#xff0c;这时我们可以通过对组件库的组件进行二次封装&#xff0c;来满足我们特殊的需求。 对于封装组件有一个大原则就是我们应该尽量保…

【74HC192减法24/20/72进制】2022-5-17

缘由用74ls192设计一个72进制的减法计数器&#xff0c;需要有逻辑电路图-硬件开发-CSDN问答

Fastapi项目通过Jenkins2.4.91自动化构建部署到Nginx1.20进行访问详细方法(完全自动化部署亲测可用)

这篇技术文章需要结合我写的前两篇文章来一起看Gitlab17.7Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用) 和 Pycharm2024.3Gitlab.17.7本地化部署和自动提交代码使用方法&#xff08;亲测可用&#xff09;&#xff0c;总体来说是三部曲。这篇文章详细解读…

iOS 11 中的 HEIF 图像格式 - 您需要了解的内容

HEIF&#xff0c;也称为高效图像格式&#xff0c;是iOS 11 之后发布的新图像格式&#xff0c;以能够在不压缩图像质量的情况下以较小尺寸保存照片而闻名。换句话说&#xff0c;HEIF 图像格式可以具有相同或更好的照片质量&#xff0c;同时比 JPEG、PNG、GIF、TIFF 占用更少的设…

DATACOM-DHCP-复习-实验

DHCP 概述工作原理DHCP分配机制 配置配置基于全局地址池的DHCP服务器配置DHCP Relay中继验证 实验配置DHCP中继 参考 概述 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于集中对用户IP地址进行动态管理和…

深入浅出 Beam Search:自然语言处理中的高效搜索利器

Beam Search 技术详解 搜索系列相关文章&#xff08;置顶&#xff09; 1.原始信息再加工&#xff1a;一文读懂倒排索引 2.慧眼识词&#xff1a;解析TF-IDF工作原理 3.超越TF-IDF&#xff1a;信息检索之BM25 4.深入浅出 Beam Search&#xff1a;自然语言处理中的高效搜索利器 1…

二、CSS基础

一、选择器(1) 大白话&#xff1a;我们人为认为的解析方式是&#xff0c;从左往右查找&#xff0c;对于浏览器来说&#xff0c;是从右往左查找&#xff0c;解析速度更高。 注&#xff1a; 伪类选择器 - 作用于实际存在的元素&#xff0c;用于描述元素的某种特定状态或关系&…

从摩托罗拉手机打印短信的简单方法

昨天我试图从摩托罗拉智能手机上打印短信&#xff0c;但当我通过USB将手机连接到电脑时&#xff0c;我在电脑上找不到它们。由于我的手机内存已达到限制&#xff0c;并且我想保留短信的纸质版本&#xff0c;您能帮我将短信从摩托罗拉手机导出到计算机吗&#xff1f; 如您所知&…

Linux终端输入删除键backspace显示^H,输入上下左右键显示^A^B^C^D原理以及详细解决办法!

当我们装完Linux系统之后,我们可能会碰到按下删除键后出现^H这种情况。 同样,输入上下左右键显示^A^B^C^D这种情况。 这是为什么呢? 别急,后面我会说具体解决办法,先来看看这是为什么? 一、终端程序架构 首先,我们需要了解终端程序架构。 终端程序架构分为三层,分别…

ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础

文章目录 简介为什么需要I2S&#xff1f;关于音频信号采样率分辨率音频声道 怎样使用I2S传输音频&#xff1f;位时钟BCLK字时钟WS串行数据SD I2S传输模型I2S通信格式I2S格式左对齐格式右对齐格式 i2s基本配置i2s 底层API加载I2S驱动设置I2S使用的引脚I2S读取数据I2S发送数据卸载…

JAVA:利用 Redis 实现每周热评的技术指南

1、简述 在现代应用中&#xff0c;尤其是社交媒体和内容平台&#xff0c;展示热门评论是常见的功能。我们可以通过 Redis 的高性能和丰富的数据结构&#xff0c;轻松实现每周热评功能。本文将详细介绍如何利用 Redis 实现每周热评&#xff0c;并列出完整的实现代码。 2、需求分…

vscode代码AI插件Continue 安装与使用

“Continue” 是一款强大的插件&#xff0c;它主要用于在开发过程中提供智能的代码延续功能。例如&#xff0c;当你在编写代码并且需要进行下一步操作或者完成一个代码块时&#xff0c;它能够根据代码的上下文、语法规则以及相关的库和框架知识&#xff0c;为你提供可能的代码续…

kafka开机自启失败问题处理

前言&#xff1a;在当今大数据处理领域&#xff0c;Kafka 作为一款高性能、分布式的消息队列系统&#xff0c;发挥着举足轻重的作用。无论是海量数据的实时传输&#xff0c;还是复杂系统间的解耦通信&#xff0c;Kafka 都能轻松应对。然而&#xff0c;在实际部署和运维 Kafka 的…

Linux Red Hat 7.9 Server安装GitLab

1、关闭防火墙 执行 systemctl disable firewalld 查看服务器状态 systemctl status firewalld 2、禁用selinux vi /etc/selinux/config 将SELINUX 的值改为 disabled 3、安装policycoreutils-python 执行 yum install policycoreutils-python 4、下载gitlab wget --co…

PostgreSQL对称between比较运算

本文介绍PostgreSQL对称between比较功能&#xff1a;between symmetric&#xff0c;在动态拼接SQL时利用它可以简化判断。PostgreSQL 9.4 及以上版本支持BETWEEN SYMMETRIC操作符&#xff0c;MySQL、Oracle、MsSQL没有对应功能。 between 比较 PostgreSQL的between结构允许你对…

[CTF/网络安全] 攻防世界 simple_php 解题详析

题目描述&#xff1a;小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 代码解读 $a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量&#xff0c;并将其赋值给变量a。符号用于禁止错误输出&#xff0c;如果不存在参数a则会将变量a设置为NULL。 $b$_GET[b];…

日志聚类算法 Drain 的实践与改良

在现实场景中&#xff0c;业务程序输出的日志往往规模庞大并且类型纷繁复杂。我们在查询和查看这些日志时&#xff0c;平铺的日志列表会让我们目不暇接&#xff0c;难以快速聚焦找到重要的日志条目。 在观测云中&#xff0c;我们在日志页面提供了聚类分析功能&#xff0c;可以…