当前位置: 首页 > article >正文

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

  🌈个人主页:易辰君-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.kler.cn/a/389398.html

相关文章:

  • 大数据技术之HBase中的HRegion
  • 若依笔记(八):Docker容器化并部署到公网
  • Java项目实战II基于微信小程序的个人行政复议在线预约系统微信小程序(开发文档+数据库+源码)
  • Unity3D学习FPS游戏(11)敌人AI巡逻(NavMesh)
  • 《AI 使生活更美好》
  • 【PGCCC】Postgresql Toast 原理
  • 使用亚马逊 S3 连接器为 PyTorch 和 MinIO 创建地图式数据集
  • MySQL之索引(3)(索引基本语法、SQL执行计划、常见索引失效原因与解决方法)
  • 使用Hutoo库HttpRequest工具类调用MultipartFile参数接口
  • 『Django』初识DRF
  • python语言基础-4 常用模块-4.5 hashlib模块与base64模块
  • 一台手机如何录制播客——程序员也可玩转播客
  • vue openlayers一些图层操作(获取指定名字的图层等)
  • 无线局域网四种类型
  • 基于JSP网上书城的设计与实现
  • QJson-趟过的各种坑(先坑后用法)
  • 前端简明教程--初体验
  • 使用vscode 连接linux进行开发
  • 2款使用.NET开发的数据库系统
  • React 探秘(四):手撸 mini-react
  • lua入门教程:type函数
  • 第二十周学习周报
  • 工程认证与Spring Boot:计算机课程管理的新挑战
  • toRef,toRefs,toRaw
  • Centos7 安装RabbitMQ以及web管理插件
  • playwright使用