【Python爬虫实战】全面解析 DrissionPage:简化 Python 浏览器自动化的三种模式

news2024/11/24 6:28:03

  🌈个人主页:易辰君-CSDN博客
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录

前言

一、DrissionPage简介

(一)ChromiumPage

(二)WebPage

(三)SessionPage

(四)三大模块总结

二、ChromiumPage

(一)初始化 ChromiumPage

(二)基本操作

(三)等待元素加载

(四)执行 JavaScript 脚本

(五)控制浏览器选项

(六)等待页面加载完成

(七)关闭浏览器

(八)使用 ChromiumPage 完成简单的登录操作

(九)ChromiumPage总结

三、总结


前言

在如今的网络数据处理与自动化任务中,浏览器自动化已成为不可或缺的技术。为了便于 Python 开发者更高效地进行网页操作,DrissionPage 提供了一种轻量级且功能强大的解决方案。本文将深入解读 DrissionPage 的三种核心模式:ChromiumPage、WebPage 和 SessionPage,并详细介绍如何在不同应用场景中选择合适的模式。无论是需要模拟图形化用户操作、控制请求数据包,还是实现快速的无界面数据交互,DrissionPage 都能提供灵活支持。


一、DrissionPage简介

DrissionPage 是一个基于 Python 的浏览器自动化库,类似于 Selenium 和 Playwright,主要用于简化网页操作。它提供了三种访问模式:ChromiumPageWebPageSessionPage。每种模式有不同的用途,通常可以作为程序的入口。以下是对这三种模式的简要介绍和用法说明:

(一)ChromiumPage

ChromiumPage 是一个专门用于操作浏览器的页面对象,主要使用 Chromium 浏览器内核进行页面加载和交互。它类似于 Selenium 的 WebDriver,支持对页面元素的查找、点击、输入、截图等操作。

常见用法示例

首先安装 DrissionPage

pip install drission

然后,可以使用以下代码示例来打开一个页面并进行简单的操作。

from drission import Drission, ChromiumPage

# 初始化 Drission 对象
drission = Drission()

# 创建 ChromiumPage 对象,打开一个浏览器页面
page = drission.use_chromium()

# 打开指定的 URL
page.get("https://example.com")

# 查找元素并进行操作
page.click('button[id="example-button"]')  # 点击按钮
page.input('input[name="username"]', 'your_username')  # 输入文本

# 截图保存
page.screenshot(path="screenshot.png")

# 关闭浏览器
page.close()

ChromiumPage 中,可以执行以下操作:

  • get(url):打开指定网址。

  • click(selector):通过选择器点击页面元素。

  • input(selector, text):在输入框中输入指定文本。

  • screenshot(path="filename"):截取页面截图。

  • close():关闭当前页面和浏览器。

ChromiumPage 适合处理需要图形化界面展示的网页自动化任务,能模拟用户与页面的交互。

(二)WebPage

WebPageDrissionPage 中一个较为复杂的页面对象,结合了浏览器控制和数据包的收发。WebPage 主要用于需要控制浏览器并同时处理请求和响应数据包的情况。它可以拦截和修改网络请求,与页面交互时还可以直接处理 AJAX 请求。

虽然 WebPage 功能较为强大,但如果您不需要重点学习它,可以直接使用 ChromiumPageSessionPage 进行简单的浏览器自动化或数据请求。

示例用法

from drission import WebPage

page = WebPage()
page.get("https://example.com")
# 使用 WebPage 控制页面并处理网络请求

(三)SessionPage

SessionPage 是一个专用于数据包收发的页面对象,主要用于模拟 HTTP 请求,类似于 Python 的 requests 库。它不依赖浏览器,因此适合需要快速发送和接收数据的任务。

SessionPage 非常适合用于访问 API、下载数据或与服务器交互,而不需要实际呈现网页内容。

使用示例

from drission import SessionPage

# 创建 SessionPage 对象
page = SessionPage()

# 发送 GET 请求
response = page.get("https://example.com/api")
print(response.text)

# 发送 POST 请求
data = {'username': 'user', 'password': 'pass'}
response = page.post("https://example.com/login", data=data)
print(response.json())

SessionPage 中,常用的方法包括:

  • get(url, params=None):发送 GET 请求。

  • post(url, data=None, json=None):发送 POST 请求。

  • json():将响应解析为 JSON 格式。

  • text:获取响应文本。

SessionPage 适合在不需要渲染网页的情况下,进行轻量级的数据交互任务。

(四)三大模块总结

  • ChromiumPage:适合图形化浏览器自动化,支持丰富的页面交互。

  • WebPage:整合了浏览器操作和数据包收发,适合需要同时操作浏览器和处理数据包的复杂任务(一般不常用)。

  • SessionPage:只用于发送 HTTP 请求,类似于 requests,适合轻量级的数据获取和 API 交互。


二、ChromiumPage

ChromiumPageDrissionPage 库中专门用于浏览器自动化的页面对象。它基于 Chromium 浏览器内核,用于打开网页并对其进行各种交互操作。ChromiumPage 提供了类似 Selenium 的功能,允许我们对网页中的元素进行查找、点击、输入文本、截图等操作,适合需要界面化的自动化任务。

(一)初始化 ChromiumPage

要使用 ChromiumPage,首先需要安装 DrissionPage 和相关依赖:

pip install drission

使用 ChromiumPage 的基本流程如下:

from drission import Drission

# 创建 Drission 对象
drission = Drission()

# 通过 Drission 对象初始化 ChromiumPage
page = drission.use_chromium()

(二)基本操作

(1)打开页面

使用 get() 方法加载一个页面:

page.get("https://example.com")

(2)查找元素

ChromiumPage 提供了多种方式查找元素,常用的方法包括:

  • 单个元素查找:使用 ele() 查找单个元素。

  • 多个元素查找:使用 eles() 查找符合条件的所有元素。

# 查找单个元素
element = page.ele('button#submit')

# 查找多个元素
elements = page.eles('div.classname')

(3)点击元素

使用 click() 方法对页面中的元素进行点击操作:

page.click('button#submit')  # 通过选择器查找并点击按钮

(4)输入文本

使用 input() 方法将文本输入到输入框或文本框中:

page.input('input#username', 'your_username')

(5)获取文本内容

使用 text()ele() 结合 .text 属性来获取元素的文本内容:

text = page.ele('div.classname').text

(6)截图

使用 screenshot() 方法对页面或特定元素进行截图:

page.screenshot(path="screenshot.png")  # 对整个页面截图
page.ele('div.classname').screenshot(path="element_screenshot.png")  # 对元素截图

(三)等待元素加载

ChromiumPage 提供了自动等待功能,适用于需要等待页面元素加载完成的场景。可以通过 wait() 等方法来控制等待行为:

# 等待特定元素出现
page.wait('div#loaded_element')

可以指定等待的超时时间和条件,确保在元素加载完成后再进行后续操作。

(四)执行 JavaScript 脚本

有时候需要执行自定义的 JavaScript 脚本,ChromiumPage 支持通过 run_js() 方法来执行 JavaScript 并获取结果:

# 在页面上执行 JavaScript
result = page.run_js('return document.title')
print(result)  # 输出页面标题

(五)控制浏览器选项

在启动 ChromiumPage 时,可以通过 launch 方法配置浏览器的启动参数。例如,无头模式、窗口大小等:

page = drission.use_chromium(headless=False, args=["--window-size=1024,768"])

参数说明:

  • headless:设置为 False 以显示浏览器窗口,True 为无头模式(适用于后台运行)。

  • args:设置启动参数,例如指定窗口大小、禁用扩展等。

(六)等待页面加载完成

对于动态页面或 AJAX 内容加载较多的页面,可以使用 wait_load() 方法等待页面完全加载。

page.get("https://example.com")
page.wait_load()  # 等待页面完成加载

(七)关闭浏览器

在完成所有操作后,使用 close() 方法关闭 ChromiumPage,释放资源:

page.close()

(八)使用 ChromiumPage 完成简单的登录操作

以下是一个示例代码,展示如何通过 ChromiumPage 打开页面、填写表单、点击按钮来实现自动化登录。

from drission import Drission

# 创建 Drission 对象并使用 ChromiumPage
drission = Drission()
page = drission.use_chromium()

# 打开登录页面
page.get("https://example-login.com")

# 输入用户名和密码
page.input("#username", "your_username")
page.input("#password", "your_password")

# 点击登录按钮
page.click("#login_button")

# 等待登录后的元素出现
page.wait('div.welcome-message')

# 获取登录后的欢迎信息
welcome_text = page.ele('div.welcome-message').text
print("Welcome message:", welcome_text)

# 关闭浏览器
page.close()

(九)ChromiumPage总结

  • ChromiumPage 提供了一套丰富的 API,允许我们轻松实现浏览器自动化任务。

  • 支持的操作包括:打开页面、查找元素、点击、输入、截图、等待元素加载、执行 JavaScript 等。

  • 通过 ChromiumPage 可以方便地控制 Chromium 浏览器,适合于需要交互式操作的自动化任务。


三、总结

DrissionPage 作为一个简洁易用的浏览器自动化库,为 Python 开发者带来了极大的便利。通过 ChromiumPage 的图形化界面操作、WebPage 的网络请求控制能力、以及 SessionPage 的轻量级数据交互,开发者可以灵活应对多种网页自动化任务。无论是实现复杂页面的操作,还是进行高效的接口数据交互,DrissionPage 都是一款不可多得的利器,让您轻松掌控网页自动化的每一步。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试驱动:编写完善测试用例的艺术

测试驱动:编写完善测试用例的艺术 如何编写测试用例 如何撰写高效的测试用例,为产品的稳定性和质量保驾护航。无论你是新手还是经验丰富的测试工程师,让我们一起深入探讨,掌握测试用例编写的精髓! 1. 明确测试目标 …

Linux系统编译boot后发现编译时间与Windows系统不一致的解决方案

现象 如下图,从filezilla软件看虚拟机Linux中编译的uboot.img修改时间与Windows系统时间不同 解决过程 在Linux中查看编译的uboot详细信息,从而得到编译时间。终端输入ls -l后,如下图: 结论 说明在Linux是按照Windows系统时…

24.11.10

星期一: 补 23ICPC 合肥 G cf传送门 思路:由使第 k个最大这种条件易联想到二分,但是如何check是个问题 check使用dp,先想到个比较朴素的状态设定,dp【i】【j】…

JavaSE:初识Java(学习笔记)

java是高级语言的面向对象语言 .[最贴近生活.最快速分析和设计程序] 一,计算机语言发展历史 二,Java体系结构 1,JavaSE(Java Standard Edition) 标准版,定位在个人计算机上的应用 这个版本是Jav…

SQL 专项练习题(合集)

1,第一题 1)表名:t_patent_detail (专利明细表) 2)表字段:专利号(patent_id)、专利名称(patent_name)、专利类型(patent_type)、申请时间 (aplly_date)、授权时间(authorize_date)、申请人(a…

使用ffmpeg播放rtsp视频流

获取IPC摄像机视频流一般使用GB28181或者RTSP协议,这两款协议是比较常见的;两者都有开源的库,下面介绍如何使用RTSP获取进行IPC视频流; 准备库 ffmepg是个开源的库,该库集成了rtsp协议,可以直接使用;首先…

【Linux探索学习】第十二弹——初识进程:进程的定义、描述和一些简单的相关操作

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在前面经过那么多篇的铺垫后,今天我们正式进入Linux学习的第一个重难点——进程,理解进程对于我们学习操作系统的其…

AI教育革命:个性化学习的新篇章

内容概要 在 教育 领域,人工智能 的崭露头角带来了前所未有的变化。如今,个性化学习 已不再是一个遥不可及的梦想,而是通过 AI 技术真正实现的可能。借助先进的数据分析能力,教师可以实时跟踪和评估每位学生的学习进度&#xff0…

ASMR助眠声音视频素材去哪找 吃播助眠素材网站分享

在快节奏的现代生活中,越来越多的人感到压力山大,许多人开始寻求助眠和放松的方式。而ASMR(自发性知觉经络反应)助眠声音视频,凭借其独特的声音刺激和放松效果,成为了睡前的“神器”。如果你是一位内容创作…

项目管理中不可或缺的能力

在现代企业中,项目管理是一项至关重要的能力。项目管理需要具备的能力包括:有效的沟通能力、团队协作能力、时间管理能力、风险管理能力、以及问题解决能力。 其中,有效的沟通能力尤为重要,它不仅涉及到信息的传递,还包…

蓝桥杯备考——算法

一、排序 冒泡排序、选择排序、插入排序、 快速排序、归并排序、桶排序 二、枚举 三、二分查找与二分答案 四、搜索(DFS) DFS(DFS基础、回溯、剪枝、记忆化) 1.DFS算法(深度优先搜索算法) 深度优先搜…

【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件

文章目录 一、自定义事件概念及使用场景二、代码解释三、新的示例 一、自定义事件概念及使用场景 概念 在 Vue 3.0 中,自定义事件是一种组件间通信的机制,允许子组件向父组件传递数据或触发父组件中的操作。子组件通过defineEmits函数定义可以触发的事件…

成功解决WSL2上的Ubuntu22.04执行sudo apt-get update指令报错问题

问题:输入sudo apt-get update指令会显示如下报错 问题所在:Temporary failure in name resolution 显然是系统无法解析域名。这可能是 DNS 配置问题。 解决方案: 临时修改 DNS 配置 尝试手动修改 /etc/resolv.conf 文件来使用公共 DNS 服务…

L1G3000 提示工程(Prompt Engineering)

什么是Prompt(提示词)? Prompt是一种灵活、多样化的输入方式,可以用于指导大语言模型生成各种类型的内容。什么是提示工程? 提示工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其输出结果的技术。 六大基本原则: 指令要清晰提供参考内容复杂的任务拆…

探索Python的Shell力量:Plumbum库揭秘

文章目录 探索Python的Shell力量:Plumbum库揭秘第一部分:背景介绍第二部分:Plumbum是什么?第三部分:如何安装Plumbum?2. 创建管道3. 重定向4. 工作目录操作5. 前台和后台执行 第五部分:场景应用…

点击文本将内容填入tinymce-vue 富文本编辑器的光标处

富文本编辑器组件 <template><div ref"tinymceBox" class"tinymce-box"><Editor id"myEditor" v-model"contentValue" :init"init" :disabled"disabled" blur"inputBlur" click"o…

星海智算:风月ComfyUI_SD3.5

&#xff08;一&#xff09;镜像介绍 1、风月ComfyUI_SD3.5​ 占用69.71G磁盘&#xff0c;为用户预留了近30个G使用。 2、SD3.5​ SD3.5&#xff0c;即Stable Diffusion 3.5&#xff0c;是Stability AI推出的最新图像生成模型&#xff0c;是Stable Diffusion 3.0版本的升级版…

在模方置平建筑失败的原因是什么?

在模方置平建筑失败的原因是什么&#xff1f; 可能是obj拓扑不连续&#xff0c;可以在网格大师使用osgb转obj功能&#xff0c;选择拓扑或者重建。 网格大师是一款能够解决实景三维模型空间参考、原点、瓦块大小不统一&#xff0c;重叠区域处理问题的工具“百宝箱”&#xff0c…

python 语言入门

目录 1.发展历程 2.优缺点 3.环境搭建 3.1.Anaconda 3.2.VSCode 3.3.重装自己的独立环境 4.第一个 python 程序 4.1.创建一个 .py 的文件 4.2.编写 python 代码 ​4.3.运行 python 代码 5.注释 5.1.单行注释 5.2.多行注释 6.转义字符 7.变量 7.1.变量类型 7.2…

C++11 --- 智能指针详解

C11 智能指针 一、智能指针的使用场景分析二、RAII和智能指针的设计思路三、智能指针的本质及衍生的问题四、C标准库的智能指针的使用五、智能指针的原理&#xff08;模拟实现&#xff09;1. auto_ptr的模拟实现2. unique_ptr的模拟实现3. shared_ptr的模拟实现&#xff08;简单…