【Python爬虫实战】深入解锁 DrissionPage:ChromiumPage 自动化网页操作指南

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

目录

前言

一、ChromiumPage基础操作

(一)初始化Drission 和 ChromiumPage 对象

(二)打开浏览器并加载页面

(三)设置浏览器启动参数

(四)加载等待设置

二、ChromiumPage元素操作

(一)基本元素定位方法

(二)常用的选择器类型

(三)常用的元素操作方法

(四)示例:完整的元素操作流程

(五)元素操作总结

三、IFrame切换

(一)为什么需要切换 iframe

(二)使用 to_iframe() 方法切换到指定的 iframe

(三)操作 iframe 内的元素

(四)切换回主页面

(五)完整示例

(六)IFrame切换总结


前言

随着网络自动化需求的增加,Python 开发者需要一种简洁而高效的工具来实现浏览器控制与网页操作。DrissionPage 作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持。本文将聚焦 DrissionPage 中的 ChromiumPage,涵盖从基础的浏览器启动、元素操作到 iframe 切换的核心功能。无论是新手入门还是资深用户的进阶需求,本文都将为您提供实用的参考指南,助您轻松掌控网页自动化任务。


一、ChromiumPage基础操作

在 DrissionPage 中,ChromiumPage 提供了多种配置选项来定制浏览器的启动方式,支持无头模式、代理设置、自定义窗口大小等配置。以下是 ChromiumPage 打开浏览器和初始化配置的详细操作。

(一)初始化Drission 和 ChromiumPage 对象

使用 ChromiumPage 打开浏览器的第一步是创建一个 Drission 对象,然后使用它来初始化 ChromiumPage。这是 DrissionPage 进行浏览器自动化的标准流程。

from drission import Drission# 创建 Drission 对象
drission = Drission()# 使用 Drission 对象初始化 ChromiumPage
page = drission.use_chromium()

(二)打开浏览器并加载页面

创建 ChromiumPage 后,可以使用 get() 方法加载指定的 URL,这会在浏览器中打开该网页。

# 打开网页
page.get("https://example.com")

(三)设置浏览器启动参数

ChromiumPage 支持在启动时自定义多种配置参数,以下是常用的配置项:

  • headless:是否启用无头模式。无头模式不会显示浏览器窗口,适合在后台运行自动化任务。默认为 True

  • args:额外的启动参数,可以传递任何 Chromium 支持的启动选项,如窗口大小、禁用扩展等。

  • proxy:设置代理服务器的 IP 和端口,用于修改访问 IP 地址。

  • user_agent:自定义浏览器的 User-Agent 标识。

  • disable_image:禁用图片加载,适合在不需要图片的情况下提高加载速度。

以下示例展示了如何在启动时配置这些参数:

# 启动浏览器并设置初始化配置
page = drission.use_chromium(headless=False,                        # 是否启用无头模式args=["--window-size=1200,800"],       # 设置窗口大小proxy="127.0.0.1:8080",                # 设置代理user_agent="MyCustomUserAgent",        # 自定义 User-Agentdisable_image=True                     # 禁用图片加载以加速页面加载
)

(四)加载等待设置

对于需要等待动态内容加载的页面,可以使用 wait_load() 方法,确保页面资源完全加载后再继续执行其他操作。这可以避免未加载完成导致的操作失败问题。

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

二、ChromiumPage元素操作

在 DrissionPage 的 ChromiumPage 中,元素定位是一项关键功能,用于查找页面中的元素并对其进行操作。ChromiumPage 提供了多种元素定位方法,类似于 Selenium 的操作方式。以下是元素定位的几种常用方法。

(一)基本元素定位方法

ChromiumPage 提供的元素定位方法主要包括以下几种:

  • ele(selector):定位单个元素

  • eles(selector):定位多个元素,返回一个元素列表

在这些方法中,selector 是用于指定 HTML 元素的选择器,支持多种选择器类型(如 CSS 选择器、XPath)。

(二)常用的选择器类型

ele()eles() 方法中,支持以下几种选择器类型:

  • CSS 选择器:使用 CSS 样式选择器定位元素,常见的形式包括:

    • 标签名:'div'

    • 类名:'div.classname'

    • ID:'#element_id'

    • 属性:'input[name="username"]'

  • XPath:通过 XPath 表达式定位元素。例如,'//div[@class="classname"]' 可以定位类名为 classnamediv 元素。

  • 标签属性:可以直接使用 @属性=值 的形式,例如 @id='element_id'

以下是具体示例代码:

# 通过 CSS 选择器定位单个元素
element = page.ele('button#submit')# 通过类名定位多个元素,返回元素列表
elements = page.eles('div.classname')# 使用 XPath 定位元素
element = page.ele('//input[@name="username"]')

(三)常用的元素操作方法

定位到元素后,可以对元素进行进一步操作,以下是常用的元素操作方法:

  • 点击元素:使用 click() 方法对定位的元素进行点击操作。

page.click('button#submit')  # 通过选择器查找并点击按钮
  • 输入文本:使用 input() 方法将文本输入到指定的输入框中。
page.input('input#username', 'your_username')
  • 获取文本内容:使用 text() 获取元素的文本内容。
text = page.ele('div.classname').text
print(text)
  • 获取属性值:使用 attr() 获取元素的指定属性值。
attribute_value = page.ele('img').attr('src')
print(attribute_value)
  • 检查元素是否可见:可以使用 exists() 方法检查元素是否存在或是否可见。
if page.ele('div.classname').exists():print("Element is visible")

(四)示例:完整的元素操作流程

以下示例代码,展示如何使用元素定位、输入文本、点击按钮和获取文本内容:

from drission import Drission# 创建 Drission 和 ChromiumPage 对象
drission = Drission()
page = drission.use_chromium(headless=False)# 打开网页
page.get("https://example.com")# 定位并输入文本
page.input('input#username', 'your_username')
page.input('input#password', 'your_password')# 定位并点击按钮
page.click('button#login_button')# 等待页面加载并获取欢迎信息
page.wait('div.welcome-message')
welcome_text = page.ele('div.welcome-message').text
print("Welcome message:", welcome_text)# 关闭浏览器
page.close()

(五)元素操作总结

DrissionPage 的 ChromiumPage 提供了简洁的元素定位和操作方法,用户可以通过 CSS 选择器或 XPath 定位页面元素,并对其进行点击、输入、获取文本等操作。结合元素等待机制,可以更好地处理动态内容,完成稳定的浏览器自动化任务。


三、IFrame切换

在网页自动化操作中,iframe 是一种用于在页面中嵌入其他 HTML 文档的元素。许多网页将功能或内容嵌入 iframe 中,直接操作 iframe 中的元素之前需要先切换到该 iframe。在 DrissionPage 中,ChromiumPage 提供了切换到 iframe 的方法,使得用户可以轻松访问和操作 iframe 内的内容。

(一)为什么需要切换 iframe

默认情况下,浏览器在加载页面时,处于主页面的上下文中,但 iframe 内容位于不同的文档环境。因此,如果想操作 iframe 中的元素,必须先将浏览器的上下文切换到对应的 iframe。否则,直接查找 iframe 中的元素会失败。

(二)使用 to_iframe() 方法切换到指定的 iframe

ChromiumPage 提供了 to_iframe() 方法用于切换到 iframe。这个方法允许通过 iframe 的序号或选择器来指定需要切换的 iframe

示例:

# 假设页面中有一个 iframe,选择器为 iframe#my_iframe
page.to_iframe('iframe#my_iframe')  # 通过选择器切换到 iframe
  • 通过序号切换:如果页面有多个 iframe,可以通过索引来切换到特定的 iframe,例如 page.to_iframe(0) 会切换到第一个 iframe

  • 通过选择器切换:可以使用选择器(如 iframe#my_iframe)来切换到指定的 iframe

(三)操作 iframe 内的元素

切换到 iframe 后,可以直接在 iframe 中查找和操作元素。例如:

# 假设 iframe 内部有一个按钮,ID 为 submit_button
page.to_iframe('iframe#my_iframe')    # 切换到 iframe
page.click('#submit_button')          # 操作 iframe 内的按钮

(四)切换回主页面

在完成 iframe 内的操作后,可以使用 to_parent() 方法切换回主页面。

page.to_parent()  # 切换回主页面

(五)完整示例

以下是一个示例,展示如何在 iframe 中操作元素并切换回主页面:

from drission import Drission# 初始化 Drission 和 ChromiumPage
drission = Drission()
page = drission.use_chromium()# 打开包含 iframe 的页面
page.get("https://example.com")# 切换到 iframe 并操作其中的元素
page.to_iframe('iframe#iframe_id')          # 通过选择器切换到 iframe
page.input('#input_field', 'some text')     # 在 iframe 内部的输入框中输入文本
page.click('#submit_button')                # 点击 iframe 内部的按钮# 切换回主页面并操作其他元素
page.to_parent()
page.click('#main_page_button')  # 操作主页面的按钮# 关闭浏览器
page.close()

(六)IFrame切换总结

通过 ChromiumPageto_iframe() 方法,可以轻松地在 iframe 和主页面之间切换,访问和操作嵌套在 iframe 内的内容。在完成操作后,可以使用 to_parent() 方法切换回主页面,便于继续处理主页面的其他元素。这种切换机制适用于各种嵌套页面的自动化场景。


四、总结

通过 DrissionPage 的 ChromiumPage,开发者可以便捷地实现浏览器的自动化控制。无论是通过多样化的元素定位方法来精确查找元素、切换到嵌套的 iframe 实现多层级操作,还是设置无头模式和代理来定制化启动,ChromiumPage 都提供了丰富的支持。其简洁的接口和强大的功能让复杂的自动化任务变得简单易行,成为提升网页操作效率的不二之选。希望本文的讲解为您进一步了解和应用 DrissionPage 提供了帮助,让网页自动化任务变得更加轻松和高效。

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

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

相关文章

VS Code 插件 MySQL Shell for VS Code

https://marketplace.visualstudio.com/items?itemNameOracle.mysql-shell-for-vs-code

稳压二极管详解

目录 1. 工作原理 2. 稳压二极管的伏安特性曲线 3. 正向特性: 4. 反向特性 5. 稳定电压(Vz) 6. 动态电阻(rz) 7.最大耗散功率(PzM) 8. 最大稳定工作电流(IzMAX)和…

Springboot 一个西餐主题网站-计算机设计毕业源码73020

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

JS渗透(安全)

JS逆向 基本了解 作用域: 相关数据值 调用堆栈: 由下到上就是代码的执行顺序 常见分析调试流程: 1、代码全局搜索 2、文件流程断点 3、代码标签断点 4、XHR提交断点 某通js逆向结合burp插件jsEncrypter 申通快递会员中心-登录 查看登录包…

世界技能竞赛大数据应用开发环境1:1还原

关注我,私信我获得集群环境 集群情况 模块A搭建环境,在容器中搭建大数据平台 Hadoop HA环境 Pc机,安装安装比赛需要软件 模块B中使用idea快速开发完成数据处理 模块E包含了接口数据,使用vs code快速搭建vue数据可视化

【c++丨STL】vector模拟实现

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…

指针的运用

接下来我将会用的话,讲解我对指针运用仅有的印象 1.解引用 int a23; int*p&a; *p666; 而*p666;,便是解引用操作,跟简单地说*p便是解引用,它的意思是,对p中所储存的地址所在位置的内容进行操作&#xf…

三周精通FastAPI:38 针对不同的编程语言来生成客户端

官方文档:https://fastapi.tiangolo.com/zh/advanced/generate-clients/ 生成客户端 因为 FastAPI 是基于OpenAPI规范的,自然您可以使用许多相匹配的工具,包括自动生成API文档 (由 Swagger UI 提供)。 一个不太明显而又特别的优势是&#…

广告联盟有哪些

随着互联网的发展,越来越多的人开始投身于网站建设和运营。对于站长来说,如何在提供优质内容的同时获取收益是一个重要的问题。广告联盟作为一种常见的盈利模式,受到了广大站长的青睐。本文将介绍5个适合国内站长的广告联盟平台,帮…

兵马未动,粮草先行-InnoDB统计数据是如何收集的

我们前面介绍查询成本的时候经常用到一些统计数据,比如通过SHOW TABLE STATUS可以看到关于表的统计数据,通过SHOW INDEX可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?本章将聚焦…

【Promise】JS 异步之宏队列与微队列

文章目录 1 原理图2 说明3 相关面试题3.1 面试题13.2 面试题23.3 面试题33.4 面试题4 1 原理图 2 说明 JS 中用来存储待执行回调函数的队列包含 2 个不同特定的队列:宏队列和微队列。宏队列:用来保存待执行的宏任务(回调),比如:定…

基础概念理解

一,数据结构分类 连续结构,跳转结构。 二,对变量的理解 在 C 语言中,变量是用于存储数据的抽象符号。变量本质上是一块内存区域的标识符(即它代表内存中的某一块区域),用来存储数据&#xff…

C 学习(4)

return 0; 前提:C 语言规定,main()是程序的入口函数,即所有的程序一定要包含一个main()函数。程序总是从这个函数开始执行,如果没有该函数,程序就无法启动。其他函数都是通过它引入程序的。 main()的写法&#xff0c…

欺诈文本分类检测(十八):基于llama.cpp+CPU推理

1. 前言 前文我们用Lora训练出自己的个性化模型后,首先面临的问题是:如何让模型在普通机器上跑起来?毕竟模型微调时都是在几十G的专用GPU上训练的,如果换到只有CPU的普通电脑上,可能会面临几秒蹦一个词的尴尬问题。 …

工程数学线性代数(同济第七版)附册课后习题答案PDF

《线性代数附册 学习辅导与习题全解》是与同济大学数学科学学院编《工程数学 线性代数》第七版教材配套的教学辅导书,由同济大学作者团队根据教材内容和要求编写而成。本书在《工程数学 线性代数》第六版附册(即辅导书)的基础上修改而成。全书…

传输层协议、ACL

第六章 传输层协议、ACL 文章目录 第六章 传输层协议、ACL1.TCP和UDP协议1.1 TCP协议1.2 TCP报文段1.3 TCP连接 2.UDP协议3.ACL概述ACL原理及种类ACL组成规则编号通配符(反掩码) 4.ACL应用ACL匹配规则ACL匹配规则 1.TCP和UDP协议 TCP/IP协议族的传输层协…

(蓝桥杯C/C++)——搜索

一、回溯法 1.回溯法简介 回溯法一般使用 ** DFS(深度优先搜索) ** 实现,DFS是一种遍历或搜索图、树或图像等数据结构的算法,当然这个图、树未必要存储下来(隐式处理就是回溯法),常见的是通过某种关系构造出的搜索树,搜索树一般…

Turtlebot3 buger 硬件与操作平台详细介绍

引言 TurtleBot3 有三个版本,分别是紧凑型的 Burger、功能更强的 Waffle和性能提升的 Waffle Pi,分别适用于不同的应用需求。使用 Raspberry Pi 作为主控单板计算机(SBC),而 Waffle Pi 可以使用更强大的 NVIDIA Jetson…

Ubuntu实现双击图标运行自己的应用软件

我们知道在Ubuntu上编写程序,最后编译得到的是一个可执行文件,大致如下 然后要运行的时候在终端里输入./hello即可 但是这样的话感觉很丑很不方便,下边描述一种可以类似Windows上那种双击运行的实现方式。 我们知道Ubuntu是有一些自带的程序…

Chromium Mojo(IPC)进程通信演示 c++(4)

122版本自带的mojom通信例子仅供学习参考: codelabs\mojo_examples\01-multi-process 其余定义参考文章: Chromium Mojo(IPC)进程通信演示 c(2)-CSDN博客 01-mojo-browser.exe 与 01mojo-renderer.exe进程通信完整例子。 一、…