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

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

  🌈个人主页:易辰君-ZEEKLOG博客
🔥 系列专栏:https://blog.ZEEKLOG.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 都是一款不可多得的利器,让您轻松掌控网页自动化的每一步。

Read more

Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 分布式开发、金融交易或具有严格时效性的业务(如:秒杀倒计时、双因素认证 OTP)时,开发者不能完全信任设备本地的系统时间。用户可能为了某种目的手动篡改时间,或者由于网络同步问题导致时间存在偏差。 ntp 软件包提供了一种直接与互联网授时中心(NTP 服务器)通信的能力。它能绕过本地系统时钟,获取绝对精准的 UTC 时间,并计算出本地时间与真实时间的“偏移量(Offset)”。 一、核心授时原理 ntp 通过测量往返网络延迟来消除误差。 发送 NTP 请求 (UDP) 返回高精度时间戳 鸿蒙 App 全球授时中枢 (pool.ntp.org) 计算网络往返耗时 (RTT) 得出绝对时间偏移量 生成鸿蒙业务专用准时 二、

By Ne0inhk
Spring Boot 数据导入导出与报表生成

Spring Boot 数据导入导出与报表生成

Spring Boot 数据导入导出与报表生成 24.1 学习目标与重点提示 学习目标:掌握Spring Boot数据导入导出与报表生成的核心概念与使用方法,包括数据导入导出的定义与特点、Spring Boot与数据导入导出的集成、Spring Boot与数据导入导出的配置、Spring Boot与报表生成的基本方法、Spring Boot的实际应用场景,学会在实际开发中处理数据导入导出与报表生成问题。 重点:数据导入导出的定义与特点、Spring Boot与数据导入导出的集成、Spring Boot与数据导入导出的配置、Spring Boot与报表生成的基本方法、Spring Boot的实际应用场景。 24.2 数据导入导出概述 数据导入导出是Java开发中的重要组件。 24.2.1 数据导入导出的定义 定义:数据导入导出是指将数据从一个系统导入到另一个系统,或从一个系统导出到另一个系统的过程。 作用: * 实现数据的迁移。 * 实现数据的备份。 * 实现数据的共享。 常见的数据导入导出格式: * CSV:Comma-Separated Values,逗号分

By Ne0inhk
Django REST framework企业级API架构实战

Django REST framework企业级API架构实战

目录 摘要 1. 🎯 开篇:从踩坑到架构 2. 🏗️ 核心原理深度解析 2.1 DRF架构设计哲学 2.2 视图集:CRUD的终极抽象 2.3 序列化器:不只是数据转换 3. 🔧 实战:完整API实现 3.1 用户管理API 3.2 分页、过滤、排序 3.3 节流与限流 4. 🔥 高级实战:企业级API 4.1 缓存优化策略 4.2 性能监控中间件 4.3 API版本管理 5. 🚀 性能优化指南 5.1 数据库优化 5.

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 redux_thunk 解决鸿蒙应用状态管理中的复杂异步副作用(异步架构神器)

Flutter for OpenHarmony: Flutter 三方库 redux_thunk 解决鸿蒙应用状态管理中的复杂异步副作用(异步架构神器)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在 OpenHarmony 应用架构设计中,状态管理(State Management)是业务的核心。如果你选择了经典的 Redux 模式,你会发现它天生是“同步”的:Action 发出,Reducer 改变 State。但在真实项目中,我们需要处理网络请求、数据库读写、文件 IO 等延时操作。如何在纯净的 Redux 链条中插入这些破坏性的“副作用”? redux_thunk 提供了一个简单而精妙的方案。它通过扩展 Redux 的中间件机制,允许你 Dispatch(派发)一个 函数 而不仅仅是对象。这为鸿蒙应用处理复杂的业务流提供了极大灵活性。 一、异步 Action

By Ne0inhk