【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.rhkb.cn/news/467774.html

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

相关文章

无人机之姿态融合算法篇

无人机的姿态融合算法是无人机飞行控制中的核心技术之一,它通过将来自不同传感器的数据进行融合,以实现更加精确、可靠的姿态检测。 一、传感器选择与数据预处理 无人机姿态融合算法通常依赖于多种传感器,包括加速度计、陀螺仪、磁力计等。这…

基于SSM的图书馆座位预约系统+lw示例参考

#1.项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理、座位管理、座位分类管理、图书馆管理、预约信息管理、退座管理、系统管理等)、普通用户(信息查看、图书馆管理、个人中心、座位预约等)技…

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战感想

文章目录 第一章:数据库水平扩展第二章:中台战略第三章:阿里分布式服务架构HSF(high speed Framework)、早期Dubbo第四章:共享服务中心建设原则第五章:数据拆分实现数据库能力线性扩展第六章&am…

鸿蒙的进击之路

1. 题记: 为什么要写鸿蒙,因为她是华为的,为什么是华为就要写,因为华为背负了国人太多太多的包袱,或点赞或抨击。 我是强烈支持华为的,但我会客观公正地去评价华为的产品,就比如这篇博文&#…

【CTFN】基于耦合翻译融合网络的多模态情感分析的层次学习

同样用了翻译模块的论文->MTMSA 代码地址->github地址 abstract 多模态情感分析是一个具有挑战性的研究领域,涉及多个异构模态的融合。主要的挑战是在多模式融合过程中出现一些缺失的模式。然而,现有的技术需要所有的模态作为输入,因…

Go的环境搭建以及GoLand安装教程

目录 一、开发环境Golang安装 二、配置环境变量 三、GoLand安装 四、Go 语言的 Hello World 一、开发环境Golang安装 官方网址: The Go Programming Language 1. 首先进入官网,点击Download,选择版本并进行下载: ​ ​ 2. …

Spring IoC DI

1. IoC 1.1 容器 容器是用来容纳某种物品的(基本)装置。——来自:百度百科 生活中的水杯,垃圾桶,冰箱等等,都是容器 代码中的容器,如:List/Map -> 数据存储容器;T…

Python异常检测 - LSTM(长短期记忆网络)

系列文章目录 Python异常检测- Isolation Forest(孤立森林) python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子(LOF)算法 Python异常检测- DBSCAN Python异常检测- 单类支持向量机(…

DolphinDB 与南方科技大学联合授课啦!

11月1日,南方科技大学商学院和 DolphinDB 联合举办了高校课程讲座。讲座由南方科技大学商学院高级研究学者冯鹏举主持,DolphinDB 创始人兼 CEO 周小华博士、某百亿私募数据平台架构师潜蛟老师进行精彩演讲。 Part 1 : 大数据时代下数据库架构革新与生态…

3.PyCharm工具

第三方IDE,集成开发工具,官网下载。 社区版本,免费使用。 创建项目

微信小程序——用户隐私保护指引填写(详细版)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【在Linux世界中追寻伟大的One Piece】poll代码改写

目录 1 -> poll代码改写 1 -> poll代码改写 结合select代码&#xff0c;将select server更改成为pollserver&#xff0c;不是一件困难的事情。 #pragma once#include <iostream> #include <string> #include <poll.h> #include <memory> #inc…

安利一款开源企业级的报表系统SpringReport

SpringReport是一款企业级的报表系统&#xff0c;支持在线设计报表&#xff0c;并绑定动态数据源&#xff0c;无需写代码即可快速生成想要的报表&#xff0c;可以支持excel报表和word报表两种格式&#xff0c;同时还可以支持excel多人协同编辑&#xff0c;后续考虑实现大屏设计…

【11月10日最新】V2.6.1版本植物大战僵尸杂交版分享与下载

&#x1f447;下载链接&#xff1a; 点击下载 更新内容 植物大战僵尸杂交版2.6.1版本的更新内容主要包括以下几个方面&#xff1a; 梦幻联动&#xff1a; 与UP主轻柔北风合作&#xff0c;推出了“植物大战僵尸贴吧版”。联动植物包括石果子与雷蘑菇杂交的雷果子&#xff0c;…

Jenkins找不到maven构建项目

有的可能没有出现maven这个选项 解决办法&#xff1a;需要安装Maven项目插件 输入​Maven Integration plugin​

路过宝安乌石岩庙记

​每周带娃从上屋地铁去罗租大道的七彩城堡儿童乐园玩&#xff0c;路上都会经过乌石岩庙附近。听说香火很繁盛&#xff0c;娃说也想去看看&#xff0c;于是来到了乌石岩庙。 石岩乌石岩庙 广东省深圳市宝安区老街一区94号 ​从百度知悉&#xff1a;乌石岩庙&#xff0c;又称“…

练习LabVIEW第四十四题

学习目标&#xff1a; 计算学生三门课(语文&#xff0c;数学&#xff0c;英语)的平均分&#xff0c;并根据平均分划分成绩等级。要求输出等级A,B,C,D,E。90分以上为A&#xff0c;80&#xff5e;89为B&#xff0c;70&#xff5e;79为C&#xff0c;60&#xff5e;69为D&#xff…

软考高级架构 - 8.1 - 系统质量属性与架构评估 - 超详细讲解+精简总结

第8章 系统质量属性与架构评估 软件系统属性包括功能属性和质量属性&#xff0c;而软件架构重点关注质量属性。 8.1 软件系统质量属性 8.1.1 概述 软件系统的质量反映了其与需求的一致性&#xff0c;即&#xff1a;软件系统的质量高低取决于它是否能满足用户提出的需求&#…

最详细【Elasticsearch】Elasticsearch Java API + Spring Boot集成 实战入门(基础篇)

Elasticsearch Java API Spring Boot集成 实战入门&#xff08;基础篇&#xff09; 一、初始Elasticseach1、什么是Elasticseach2、Elasticsearch生态2、Elasticsearch结构3、Elasticsearch核心概念4、Elasticsearch 实现全文检索的原理 二、Elasticsearch入门1、入门-环境安装…

类文件结构详解

回顾一下字节码 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class 的文件&#xff09;&#xff0c;它不面向任何特定的处理器&#xff0c;只面向虚拟机。Java 语言通过字节码的方式&#xff0c;在一定程度上解决了传统解释型语言执行效率低…