【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-Agent
    disable_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 提供了帮助,让网页自动化任务变得更加轻松和高效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何保证kafka生产者数据可靠性

ack参数的设置: 0:生产者发送过来的数据,不需要等数据落盘应答 假如发送了Hello 和 World两个信息,Leader直接挂掉,数据就会丢失 生产者 ---> Kafka集群 一放进去就跑 数据可靠性分析:丢数 1&#…

python爬虫指南——初学者避坑篇

目录 Python爬虫初学者学习指南一、学习方向二、Python爬虫知识点总结三、具体知识点详解和实现步骤1. HTTP请求和HTML解析2. 正则表达式提取数据3. 动态内容爬取4. 数据存储5. 反爬虫应对措施 四、完整案例:爬取京东商品信息1. 导入库和设置基本信息2. 获取网页内容…

C 语言学习-05【数组】

1、一维数组元素的操作 输入一个数&#xff0c;按原来排序的规律将它插入到一个一排列好的数组中&#xff1a; #include <stdio.h>int main() {int i, data, a[10] {2, 3, 6, 9, 11, 12, 14, 17, 19};printf("Primitive series: \n");for (i 0; i < 9; i)…

C 语言学习-1【基本语法】

1、符号常量 #define 符号常量名 常量 使用符号常量计算圆柱体的体积&#xff1a; #include <stdio.h> #define PI 3.1415926int main() {float r, h, volum;printf("Please enter the radius: ");scanf("%f", &r);printf("Please enter th…

【微服务】不同微服务之间用户信息的获取和传递方案

如何才能在每个微服务中都拿到用户信息&#xff1f;如何在微服务之间传递用户信息&#xff1f; 文章目录 概述利用微服务网关做登录校验网关转微服务获取用户信息openFeign传递微服务之间的用户信息 概述 要在每个微服务中获取用户信息&#xff0c;可以采用以下几种方法&#…

HarmonyOS入门 : 获取网络数据,并渲染到界面上

1. 环境搭建 开发HarmonyOS需要安装DevEco Studio&#xff0c;下载地址 : https://developer.huawei.com/consumer/cn/deveco-studio/ 2. 如何入门 入门HarmonyOS我们可以从一个实际的小例子入手&#xff0c;比如获取网络数据&#xff0c;并将其渲染到界面上。 本文就是基于…

SpringMVC总结 我的学习笔记

SpringMVC总结 我的学习笔记 一、SpringMVC简介1.MVC2.SpringMVC概述3. SpringMVC中的核心组件4.SpringMVC核心架构流程 二、SpringMVC框架实例具体实现使用注解实现 四、数据处理及跳转1.结果跳转方式2.处理器方法的参数与返回值处理提交数据数据显示到前端 五、RestFul风格1.…

Qml 模型-视图-代理(贰)之 动态视图学习

Repeater 元素适合有限的静态数据&#xff0c; QtQuick 提供了 ListView 和 GridView, 这两个都是基于 Flickable(可滑动) 区域的元素 &#xff0c; ListView 与 Repeater 相比&#xff0c; ListView 使用了一个 model&#xff0c; 使用delegate 来 实例化&#xff0c;并且在两…

rce代码层面

目录 RCE的分类Remote Code Execute 远程代码执⾏php Remote Command Execte 远程命令执⾏php shell的相关知识管道重定向fd反弹shell linux进程的创建c/php/python下的system()/popen()函数python的subprocess.call函数java的Runtime.getRuntime().exec和ProcessBuilder()命令…

一篇文章入门docker!

文章目录 DockerUbuntu 下 docker 安装安装docker运行docker Docker的常用命令帮助命令镜像命令容器命令其他常用命令小结 分层理解一、Docker镜像的分层结构二、UnionFS与镜像分层三、镜像层的具体内容四、镜像分层的好处五、容器层与镜像层的关系 如何提交一个自己的镜像 Doc…

【大数据学习 | HBASE】habse的表结构

在使用的时候hbase就是一个普通的表&#xff0c;但是hbase是一个列式存储的表结构&#xff0c;与我们常用的mysql等关系型数据库的存储方式不同&#xff0c;mysql中的所有列的数据是按照行级别进行存储的&#xff0c;查询数据要整个一行查询出来&#xff0c;不想要的字段也需要…

泛微E9 OA与金蝶云的差旅费报销接口集成

FD001-差旅费报销申请 泛微>金蝶--498 集成案例分享 在企业日常运营中&#xff0c;差旅费报销申请的处理效率直接影响到员工满意度和财务管理的精确性。为了实现泛微OA-Http系统与金蝶云星空平台之间的数据无缝对接&#xff0c;我们设计并实施了FD001-差旅费报销申请集成方…

鸿蒙开发:ArkUI Toggle 组件

ArkUI提供了一套完整的UI开发工具集&#xff0c;帮助开发者高效完成页面的开发。它融合了语言、编译器、图形构建等关键的应用UI开发底座&#xff0c;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能以及实时界面预览工具等&#xff0c;可以支持…

ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验

文章目录 &#x1f340;引言&#x1f340;ONLYOFFICE 产品简介&#x1f340;功能与特点&#x1f340;体验与测评ONLYOFFICE 8.2&#x1f340;邀请用户使用&#x1f340; ONLYOFFICE 项目介绍&#x1f340;总结 &#x1f340;引言 在日常办公软件的选择中&#xff0c;WPS 和微软…

Webserver(5.6)服务器压力测试

目录 webbench是linux上一款知名的优秀的web性能压力测试工具。 测试处在相同硬件上&#xff0c;不同服务的性能以及在不同硬件上同一个服务的运行状况 展示服务器的两项内容&#xff1a;每秒钟响应请求数和每秒钟传输数据量 webbench首先fork多个子进程&#xff0c;每个子进程…

数据结构:顺序表(动态顺序表)

专栏说明&#xff1a;本专栏用于数据结构复习&#xff0c;文章中出现的代码由C语言实现&#xff0c;在专栏中会涉及到部分OJ题目&#xff0c;如对你学习有所帮助&#xff0c;可以点赞鼓励一下博主喔&#x1f493; 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;数…

【ACM出版,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)

2024年计算机视觉与艺术研讨会&#xff08;CVA 2024&#xff09; 2024 Seminar on Computer Vision and Art 基本信息 会议官网&#xff1a;www.icadi.net 2024 Seminar on Computer Vision and Artwww.icadi.net(CVA为ICADI分会&#xff0c;网站沿用主会议&#xff1b;议程、…

若依框架-添加测试类-最新

1、在【ruoyi-admin】的pom.xml下添加依赖 <!-- 单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><scope>test</scope></dependency><dependency>…

用 Python 从零开始创建神经网络(二)

用 Python 从零开始创建神经网络&#xff08;二&#xff09; 引言1. Tensors, Arrays and Vectors&#xff1a;2. Dot Product and Vector Additiona. Dot Product &#xff08;点积&#xff09;b. Vector Addition &#xff08;向量加法&#xff09; 3. A Single Neuron with …

信息安全工程师(76)网络安全应急响应技术原理与应用

前言 网络安全应急响应&#xff08;Network Security Incident Response&#xff09;是针对潜在或已发生的网络安全事件而采取的网络安全措施&#xff0c;旨在降低网络安全事件所造成的损失并迅速恢复受影响的系统和服务。 一、网络安全应急响应概述 定义&#xff1a;网络安全应…